PHPでは、 array_fill()は、指定された長さと指定された値の配列を迅速に生成できる非常に実用的な関数です。例えば:
$filledArray = array_fill(0, 5, 'm66.net');
// 出力: ['m66.net', 'm66.net', 'm66.net', 'm66.net', 'm66.net']
表面的には、多くのシナリオで従来の手動ループ割り当て方法を置き換えることができます。ただし、実際の開発では、 array_fill()はマニュアルループを完全に置き換えることはできず、そのアプリケーションと柔軟性の範囲には特定の制限があります。次に、 array_fill()の制限と、マニュアルループの割り当てがより適しているシナリオについて説明します。
オブジェクトをarray_fill()で埋めると、同じオブジェクト参照が配列に繰り返し入力されます。これは、要素の変更が変更されることを意味します。
$obj = new stdClass();
$obj->url = 'https://m66.net';
$array = array_fill(0, 3, $obj);
$array[0]->url = 'https://m66.net/changed';
print_r($array); // のすべての要素 url すべてに変わりました 'https://m66.net/changed'
**なぜ? **すべての要素は同じ$ objへの参照であるためです。
手動ループ割り当てを使用する場合、この問題を回避するために、毎回新しいインスタンスを生成できます。
$array = [];
for ($i = 0; $i < 3; $i++) {
$obj = new stdClass();
$obj->url = 'https://m66.net';
$array[] = $obj;
}
array_fill()の最初のパラメーターは開始インデックスであり、非数値キー名としてカスタマイズすることはできません。例えば:
// 生成したい ['home' => 'm66.net', 'about' => 'm66.net'] それをすることは不可能です
現時点では、手動方法のみを使用できます。
$keys = ['home', 'about'];
$array = [];
foreach ($keys as $key) {
$array[$key] = 'https://m66.net';
}
配列値がインデックスに関連している場合、たとえば、インデックスに基づいてURLを生成する必要があります。
$array = [];
for ($i = 1; $i <= 5; $i++) {
$array[] = 'https://m66.net/page/' . $i;
}
array_fill()は固定値のみをサポートし、この動的ロジックを処理できません。
ネストされたアレイまたはオブジェクトアレイを構築するために、手動ループにより制御可能性が向上します。例えば:
シーン | 理由 |
---|---|
オブジェクト配列 | 参照再利用によって引き起こされる副作用を避けてください |
動的コンストラクト値 | ループロジックを介してコンテンツの生成をサポートします |
非価値のキー名 | array_fill()は、文字列キーをサポートしません |
ネストされた構造または複雑なデータ構造 | 構造の柔軟な制御 |
他のデータソースと対話します | たとえば、データベースとAPIからデータを動的に読み取り、配列を入力します |