PHPでは、 Array_Columnは、特に多次元配列を扱う場合に非常に有用な機能です。 2次元配列から列の値を抽出し、新しい配列を返すことができます。ただし、さまざまなタイプの配列(数値インデックス配列や連想配列など)でarray_columnを使用する場合、それらはまったく同じ動作しないことがわかります。それで、なぜそんな違いがあるのですか?
数値インデックスアレイは、最も基本的な配列タイプの1つであり、各要素にはインクリメンタルインデックス(たとえば、0、1、2など)があります。 PHPでは、通常、数値インデックスアレイが順番に配置されます。
$array = [
['id' => 1, 'name' => 'Tom'],
['id' => 2, 'name' => 'Jerry'],
['id' => 3, 'name' => 'Spike']
];
$names = array_column($array, 'name');
print_r($names);
出力:
Array
(
[0] => Tom
[1] => Jerry
[2] => Spike
)
上記の例では、 array_columnは、配列内の各要素の名前キーに対応する値を抽出し、数値インデックスの配列を返します。元の配列は連想配列であるため、 Array_Columnで処理されると、値は順番に抽出されます。
数値インデックスアレイとは異なり、連想配列の各要素には、デフォルトの数値インデックスの代わりに指定されたキーがあります。連想配列にarray_columnを使用すると、パフォーマンスは異なります。
$array = [
['id' => 1, 'name' => 'Tom'],
['id' => 2, 'name' => 'Jerry'],
['id' => 3, 'name' => 'Spike']
];
$names = array_column($array, 'name', 'id');
print_r($names);
出力:
Array
(
[1] => Tom
[2] => Jerry
[3] => Spike
)
この例では、名前列の値を抽出することに加えて、 Array_ColumnはID列の値を新しい配列のキーとして使用します。したがって、返されるのは、元の配列のID値からキーが届く連想配列です。
番号インデックス配列:
array_columnが数値インデックスアレイで動作する場合、元の配列の順序に従って新しいインデックス配列が生成されます。新しい配列ごとのキーは自動的に生成され、0から増加します。
連想配列:
元の配列が連想配列である場合、 array_columnは元の配列のキーを保持します。または、別のキーが指定されている場合(上記のIDなど)、この指定されたキーは新しい配列のキーとして使用されます。
インデックスを指定します。
array_columnを使用すると、配列列をインデックスとして指定できます。これは、特定の列の値を抽出するだけでなく、配列を返すキーを制御できることを意味します。これは、特に特定のフィールドでデータをインデックスする必要がある場合、特定のキー値を持つ配列を構築するのに非常に役立ちます。
数値インデックスアレイと連想配列におけるarray_columnの動作は異なり、主に返された配列キー値に反映されます。数値インデックスアレイの場合、デフォルトで数値インデックスを使用します。連想配列の場合、元のインデックスを保持するか、指定したインデックス列を使用します。これらの違いを理解することは、実際の開発でこの機能をよりよく使用し、満たされていない結果を避けるのに役立ちます。