PHPで多次元配列を処理する場合、構造の初期化には特定のスキルが必要になることがよくあります。 array_fill_keysは、1次元の連想配列を初期化する際に非常に便利な機能です。これにより、キー名の配列と統一された初期値を介して配列をすばやく生成できます。ただし、1つを初期化する必要がある場合、 array_fill_keysの適用性について議論する価値があります。
この記事では、多次元アレイの初期化のarray_fill_keysのアプリケーション方法と適用可能なシナリオを詳細に紹介し、その制限を分析します。
array array_fill_keys(array $keys, mixed $value)
この関数は、2つのパラメーターを受信します。
$キー:キー名を含む配列
$値:各キーに割り当てる必要がある値
例:
$keys = ['name', 'age', 'gender'];
$result = array_fill_keys($keys, null);
// 出力結果
print_r($result);
/*
Array
(
[name] =>
[age] =>
[gender] =>
)
*/
このアプローチは、統一された構造で1次元配列を初期化するのに非常に適しています。
array_fill_keys自体はネストされた配列を直接生成することはできませんが(つまり、多次元構造を初期化することはできません)、 Array_mapまたはループを組み合わせることにより、多次元アレイを初期化する目的を「偽装」することができます。
複数のユーザーの統一された構成構造を初期化する必要があると仮定します。
$user_ids = [101, 102, 103];
$config_keys = ['theme', 'language', 'notifications'];
$default_config = array_fill_keys($config_keys, 'default');
$users = array_fill_keys($user_ids, []);
foreach ($users as $id => &$config) {
$config = $default_config;
}
unset($config);
print_r($users);
/*
Array
(
[101] => Array
(
[theme] => default
[language] => default
[notifications] => default
)
[102] => Array
(
[theme] => default
[language] => default
[notifications] => default
)
[103] => Array
(
[theme] => default
[language] => default
[notifications] => default
)
)
*/
$user_ids = [101, 102, 103];
$config_keys = ['theme', 'language', 'notifications'];
$default_config = array_fill_keys($config_keys, 'default');
$users = array_map(function() use ($default_config) {
return $default_config;
}, array_fill_keys($user_ids, null));
print_r($users);
一貫した構造で構成データを初期化します
1Dアレイまたは2D構造のコピーをすばやく作成します
フォームフィールドプリセット値構造
ネストされた初期化はサポートされていません。マルチレイヤーネスト構造(第3レベルや4レベルのアレイなど)は直接生成することはできません。
引用質問:初期化値が深いコピーのない配列またはオブジェクトである場合、複数のキーが同じメモリ領域を指し、1つの値を変更すると他のすべてのアイテムに影響する場合があります。
キー値は動的ネスティング形式をサポートしません:動的ネスティングキー名の場合、追加の論理処理が必要です。
array_fill_keysが多次元配列の初期化要件を満たすことができない場合、次の代替案を考慮することができます。
再帰関数を使用してネストされたアレイを構築します
array_reduceでネストされた構造を動的に生成します
カスタムクラスを使用した初期化論理カプセル化
ユーザー許可システムを構築していると仮定し、各ユーザーの許可を空のコレクションに初期化する必要があるとします。次のように書くことができます。