PHPでは、 array_fill_keys()は、新しい配列を作成し、指定されたキー名を同じ値で入力する非常に便利な関数です。この関数の構文は次のとおりです。
array_fill_keys(array $keys, mixed $value): array
$キー:キー名を含む配列。
$値:各キー名に指定された値。
簡単な例があるとします:
$keys = ['a', 'b', 'c'];
$value = 1;
$result = array_fill_keys($keys, $value);
print_r($result);
出力は次のとおりです。
Array
(
[a] => 1
[b] => 1
[c] => 1
)
この例は簡単です。 array_fill_keys()提供されたキー名a 、 b 、 cおよび指定された値1に基づいて新しい配列を作成します。
ただし、問題は、 array_fill_keys()に渡された$ keys配列が重複したキー名を含む場合、関数はこれらの重複するキー名を無視し、表示される最後のキー値ペアのみを保持することです。
たとえば、次のコードをご覧ください。
$keys = ['a', 'b', 'a', 'c'];
$value = 1;
$result = array_fill_keys($keys, $value);
print_r($result);
結果はキーを複製していると予想されるかもしれませんが、実際には次のようになります。
Array
(
[a] => 1
[b] => 1
[c] => 1
)
この例では、キー名Aは繰り返しarray_fill_keys()に渡されますが、配列の結果は1つのキーAのみを保持し、その値は1です。この動作は、配列のキー名がPHPで一意であるため、繰り返されるキー名は無視され、表示される最後のキーのみが残るためです。
この動作は、PHPアレイの内部実装によって説明できます。 PHPでは、配列のキー名は一意です。 array_fill_keys()が新しい配列を作成すると、実際に各キー名を指定された値にバインドし、キー名が重複している場合、キー名の最後の発生のみを保持します。これは、PHPの配列が同じキー名を2回表示することを許可しないため、配列内のキーの重複を避けるためです。
この問題を回避し、 $キーにarray_fill_keys()に渡された重複キー名がないことを確認したい場合は、最初にarray_unique()を使用して、キー名の重複を削除できます。
$keys = ['a', 'b', 'a', 'c'];
$value = 1;
$uniqueKeys = array_unique($keys);
$result = array_fill_keys($uniqueKeys, $value);
print_r($result);
出力は次のとおりです。
Array
(
[a] => 1
[b] => 1
[c] => 1
)
これにより、新しい配列を入力するために一意のキー名のみが使用されるようにします。
array_fill_keys()は非常に便利な機能ですが、渡されたキー名配列に重複したキー名が含まれている場合、重複部分を無視し、表示される最後のキー値ペアのみを保持します。この動作は、PHPアレイ設計の一部であり、配列のキー名の独自性を保証します。重複したキー名の問題に対処する必要がある場合は、 array_unique()を介して重複キーを削除して、各キー名が一意であることを確認できます。
うまくいけば、この記事は、重複したキー名に遭遇したときにarray_fill_keys()関数とその動作をよりよく理解するのに役立ちます。他に質問がある場合は、いつでも質問することができます!