PHPでは、 array_fill()は、デフォルト値を持つ配列を作成するための非常に実用的な関数です。ただし、1つの制限は、文字列キー(つまり、連想配列)の使用がサポートされていないことです。したがって、指定されたキー名で連想配列を初期化するためにarray_fill()のような方法を使用する場合はどうすればよいですか?
この記事では、関連するキー値のバッチ初期化をサポートするカスタム関数をカプセル化する方法について説明します。
まず、標準のarray_fill()がどのように機能するかを見てみましょう。
$filled = array_fill(0, 3, 'default');
print_r($filled);
出力の結果は次のとおりです。
Array
(
[0] => default
[1] => default
[2] => default
)
数値キーのみをサポートし、開始インデックスから指定された数の要素を入力することがわかります。
次のように、定義されたキー名のセットがあるとします。
$keys = ['username', 'email', 'age'];
「n/a」などの統一されたデフォルト値に一度に初期化し、次の構造を生成したいと考えています。
[
'username' => 'N/A',
'email' => 'N/A',
'age' => 'N/A'
]
PHPには組み込みのarray_fill_keys()関数がありますが、この目標を達成するために、教育目的のために、より拡張可能なバージョンを自分でカプセル化します。
/**
* 指定されたキー配列と値を使用します,連想配列を初期化します
*
* @param array $keys 使用するキー名の配列
* @param mixed $value 各キーのデフォルト値
* @return array 初期化された連想配列
*/
function array_fill_keys_custom(array $keys, $value): array {
$result = [];
foreach ($keys as $key) {
$result[$key] = $value;
}
return $result;
}
$fields = ['username', 'email', 'age'];
$defaultValue = 'N/A';
$initializedArray = array_fill_keys_custom($fields, $defaultValue);
print_r($initializedArray);
出力結果:
Array
(
[username] => N/A
[email] => N/A
[age] => N/A
)
また、この関数を拡張して、コールバック関数を使用するなど、キー名に基づいて異なる値を動的に生成することもサポートすることもできます。
function array_fill_keys_callback(array $keys, callable $callback): array {
$result = [];
foreach ($keys as $key) {
$result[$key] = $callback($key);
}
return $result;
}
$keys = ['token', 'session_id', 'timestamp'];
$data = array_fill_keys_callback($keys, function($key) {
switch ($key) {
case 'token':
return bin2hex(random_bytes(8));
case 'session_id':
return uniqid('sess_', true);
case 'timestamp':
return date('Y-m-d H:i:s');
default:
return null;
}
});
print_r($data);
出力の例(実行ごとに異なる場合があります):
Array
(
[token] => 9f3a8f734b23f9cd
[session_id] => sess_6623fa3890adf3.20534250
[timestamp] => 2025-04-20 13:52:43
)
このカプセル化は、フォームフィールドの初期化、APIリターンテンプレートの生成、またはデフォルトの構成配列の構築に最適です。たとえば、REST APIのデフォルトリターンを作成する場合:
$responseTemplate = array_fill_keys_custom(['code', 'message', 'data'], null);
$responseTemplate['code'] = 200;
$responseTemplate['message'] = '操作は成功しました';
$responseTemplate['data'] = ['url' => 'https://m66.net/api/example'];
print_r($responseTemplate);
PHPは、いくつかの既製の配列関数( array_fill_keys()など)を提供しますが、カスタムカプセル化を介して、特に連想配列を扱う場合は、より柔軟な初期化方法を実装できます。
この方法には、よりエレガントなコードがあるだけでなく、配列の操作ロジックに対する制御が改善されます。これは、特に大量の構造化データを動的に生成する必要がある場合に、実際のプロジェクトで非常に有用なガジェットになります。