PHP開発では、 array_fill()関数は非常に実用的なツールであり、指定された長さと指定された値で満たされた配列を迅速に生成できます。これは、データ構造を初期化したり、デフォルト値を迅速に埋め込む場合に特に便利です。ただし、この関数に関する一般的な質問は、「アレイにどのくらいの大きさを埋めることができますか?上限はありますか?」です。
array_fill()関数の基本的な構文は次のとおりです。
array array_fill(int $start_index, int $count, mixed $value)
$ start_index :配列の開始インデックス。
$ count :埋める要素の数。
$値:パディングの値。
簡単な例を見てみましょう:
$result = array_fill(0, 5, 'm66.net');
print_r($result);
出力は次のとおりです。
Array
(
[0] => m66.net
[1] => m66.net
[2] => m66.net
[3] => m66.net
[4] => m66.net
)
array_fill()自体は明らかな制限を設定していませんが、次の側面の対象となります。
PHPはメモリに敏感な言語であり、 array_fill()で埋められたデータはメモリに直接保存されている配列です。それを使用して非常に大きな配列を作成しようとすると(数百万または数億要素など)、「メモリオーバーフロー」や「スクリプト実行タイムアウト」などのエラーが発生する可能性があります。
たとえば、次の例では、PHPが「許可されたメモリサイズの使い果たされた」エラーをスローする可能性があります。
$hugeArray = array_fill(0, 100000000, 'test'); // 知らせ:生産環境でこのコードをさりげなく実行しないでください!
PHPのMemory_limitがデフォルト値(128mまたは256mなど)に設定されている場合、上記のコードはほぼ確実に失敗します。 ini_set()を介してメモリ制限を一時的に増やすことができますが、最終的にはサーバーの物理リソースによって制限されます。
ini_set('memory_limit', '1G');
array_fill() $ countの2番目のパラメーターは整数であり、理論的最大値はphp_int_maxです。 64ビットシステムでは、 PHP_INT_MAXは約9.2×10^18ですが、実際にはメモリが十分ではないため、その大きな配列を埋めることはできません。
32ビットシステムでは、 PHP_INT_MAXは約2,147,483,647(21億)ですが、それでも理論的です。
PHPは自動的に成長する配列インデックスをサポートしていますが、特にインデックスが膨大な数字で始まる場合、パフォーマンスの問題を引き起こしたり、警告を引き起こす可能性がある場合、それらは無限に大きくありません。
$weirdArray = array_fill(PHP_INT_MAX - 5, 10, 'value');
// これにより、スパースアレイが作成されます,多くの記憶を取り上げるかもしれません。
PHPはあなたがこれを行うのを止めませんが、結果はあなたが期待するものではないかもしれません。
Array_fill()関数には、理論的には「要素数が制限されています」はありませんが、実際にはサーバーメモリによって制限されています。
ほとんどの通常の使用シナリオでは、メモリが許可されていれば、数万から数百万の要素の配列が受け入れられます。
無意味にスーパーレージアレイを埋めないようにし、スクリプトのメモリ使用量を監視することをお勧めします。
より柔軟でメモリ節約構造が必要な場合は、ジェネレーター(収量)またはその他の軽い処理方法の使用を検討してください。
ページングインターフェイスまたはAPIのパフォーマンスをテストするなど、テストデータまたはシミュレートされたデータリストの特定の構造を構築する場合は、次の方法を使用して、 array_mapと組み合わせて実装できます。
$users = array_fill(0, 1000, null);
$users = array_map(function($index) {
return [
'id' => $index,
'name' => "User_$index",
'profile' => "https://m66.net/user/$index"
];
}, array_keys($users));
print_r($users[0]);