PHPでは、Native Array_Fill()関数を使用して、固定値で指定されたキー範囲をArrayのキー範囲に入力できます。これは、構文が単純で非常に効率的です。
$filled = array_fill(0, 5, 'default');
// 結果: ['default', 'default', 'default', 'default', 'default']
ただし、充填値を固定せずに、何らかのロジックによって動的に生成される場合があります。たとえば、現在のキーに基づいて生成された増分数値、uuid、乱数、またはカスタム構造を入力します。
より柔軟な要件を実現するために、 array_fill()関数: array_fill_advanced()の拡張バージョンを設計できます。この関数を使用すると、「デフォルト値コールバック関数」を渡して、キー名に基づいて対応する値を動的に生成できます。
任意の長さの充填配列をサポートします
開始インデックスはカスタマイズできます(整数または文字列にすることができます)
値は、コールバック関数によって固定または生成できます。
コールバック関数は、現在のキーインデックスをパラメーターとして受け入れます
以下は、array_fill_advanced()の実装です。
/**
* アレイを動的に埋めます
*
* @param int|string $startIndex キー名を開始します
* @param int $count 塗りつぶし数
* @param mixed $valueOrCallback 固定値またはコールバック関数
* @return array
*/
function array_fill_advanced($startIndex, int $count, $valueOrCallback): array {
$result = [];
// 開始インデックスが整数であるかどうかを判断します
$isNumericIndex = is_int($startIndex);
for ($i = 0; $i < $count; $i++) {
$key = $isNumericIndex ? $startIndex + $i : $startIndex . $i;
if (is_callable($valueOrCallback)) {
$result[$key] = call_user_func($valueOrCallback, $key);
} else {
$result[$key] = $valueOrCallback;
}
}
return $result;
}
$data = array_fill_advanced(1, 3, 'hello');
// 結果: [1 => 'hello', 2 => 'hello', 3 => 'hello']
$data = array_fill_advanced(0, 5, function($index) {
return bin2hex(random_bytes(4));
});
// 結果: [0 => '9f3a4b2c', 1 => 'fa92be77', ...]
$data = array_fill_advanced('item_', 3, function($key) {
return strtoupper($key);
});
// 結果: ['item_0' => 'ITEM_0', 'item_1' => 'ITEM_1', ...]
$data = array_fill_advanced(0, 3, function($index) {
return [
'id' => $index,
'url' => "https://m66.net/resource/{$index}"
];
});
/*
結果:
[
0 => ['id' => 0, 'url' => 'https://m66.net/resource/0'],
1 => ['id' => 1, 'url' => 'https://m66.net/resource/1'],
...
]
*/
array_fill_advanced()は、 PHP開発者に、より一般的で、より強力で、より柔軟なアレイ充填方法を提供します。コールバック関数を導入することにより、重複コードを削減するだけでなく、キー値ロジックに基づいて動的なコンテンツ構造を実装できます。
これは、バッチの初期化データの処理、テストサンプルの構築、シミュレートされたAPIデータの生成などのシナリオで非常に便利です。匿名関数と柔軟なキーネーム戦略を組み合わせて、 array_fill_advanced()はツールボックスで非常に実用的なガジェットになります。