PHP | array_fill_keysの使い方とサンプルまとめ

Code:

$result = array_fill_keys(配列, 値);
keyを指定して連想配列を生成します。
値には、文字列や数値などの値、配列、NULL、functionなど、様々な値を指定することができます。
色々な値を渡した場合の使い方を紹介していきます。

    もくじ

  1. 使い方
  2. 他の書き方
  3. まとめ

使い方

配列と文字列を渡す

Code:

$array = [1, 2, 3];
$value = 'A';
$result = array_fill_keys($array, $value);

Result:

array(3) {
	[1]=>
	string(1) "A"
	[2]=>
	string(1) "A"
	[3]=>
	string(1) "A"
}
第一引数に渡された配列の値がkeyとなり連想配列が作られます。
値には第二引数に指定した値が代入されます。

配列と配列を渡す

Code:

$array = [1, 2, 3];
$value = ['A', 'B', 'C'];
$result = array_fill_keys($array, $value);

Result:

array(3) {
	[1]=>
	array(3) {
		[0]=>
		string(1) "A"
		[1]=>
		string(1) "B"
		[2]=>
		string(1) "C"
	}
	[2]=>
	array(3) {
		[0]=>
		string(1) "A"
		[1]=>
		string(1) "B"
		[2]=>
		string(1) "C"
	}
	[3]=>
	array(3) {
		[0]=>
		string(1) "A"
		[1]=>
		string(1) "B"
		[2]=>
		string(1) "C"
	}
}
値に配列を指定することも可能です。

連想配列と数値を渡す

Code:

$array = [
    'A' => 'a', 
    'B' => 'b',  
    'C' => 'c', 
];
$value = 1;
$result = array_fill_keys($array, $value);

Result:

array(3) {
	["a"]=>
	int(1)
	["b"]=>
	int(1)
	["c"]=>
	int(1)
}
keyとなる配列に連想配列を渡した場合でも正常に動作します。
連想配列の場合も配列と同様に値がkeyとなり、連想配列が生成されます。

重複する値のある配列と文字列を渡す

Code:

$array = [1, 2, 3, 2, 1];
$value = 'A';
$result = array_fill_keys($array, $value);

Result:

array(3) {
	[1]=>
	string(1) "A"
	[2]=>
	string(1) "A"
	[3]=>
	string(1) "A"
}
keyとなる配列に重複した値があると、重複したkeyは省略されます。
渡した要素数と、返される要素数に差異が出てしまうので注意が必要です。

空の配列と文字列を渡す

Code:

$array = [];
$value = 'A';
$result = array_fill_keys($array, $value);

Result:

array(0) {
}
keyとなる値がないので、値に何を渡していたとしても連想配列は生成されず、空の配列が返ります。

結果が数字のキーとなるような配列と文字列を渡す

Code:

$array = [2, 1, 0];
$value = 'A';
$result = array_fill_keys($array, $value);

Result:

array(3) {
	[2]=>
	string(1) "A"
	[1]=>
	string(1) "A"
	[0]=>
	string(1) "A"
}
渡した配列としての順序は保持され、勝手にソートされるようなことはありません。

配列以外の値を指定する

Code:

$array = 1;
$value = 1;
$result = array_fill_keys($array, $value);

Result:

NULL
第一引数に配列以外の値を指定すると、NULLが返ります。
エラーにならないので、注意が必要です。

配列と無名関数を渡す

Code:

$array = [1, 2, 3];
$value = function($args) {
    return $args * 2;
};
$result = array_fill_keys($array, $value);
var_dump($result[1](123));

Result:

int(246)
使う機会が思いつきませんが、無名関数を渡すことも可能です。
渡された関数を実行することも出来ます。
使う機会が思いつきませんが。

他の書き方

配列を使って、連想配列を作るだけの関数なので、色々と代用方法があります。
思い出せない時などは、調べるより早いのでforeachを使ってしまったりします。

Code:

$array = [1, 2, 3];
$value = 'A';
$result = array_fill_keys($array, $value);

$result = [];
// array_fill_keysと同義
foreach ($array as $key) {
    $result[$key] = $value;
}

まとめ

今回は「array_fill_keys」の解説となりました。
抜けがあってはならない配列データ(日付など)の初期化などに使えたりします。(カレンダーの日付配列を作成した後に、誕生日データを追加したい時とか)
あまり使う機会の多い関数ではありませんが、コード量が減り可読性が上がるので是非取り入れてみてください!