このタスクarray_column()
の代わりに使用する方が、よりエレガント/表現力豊か/モダン/簡潔です。foreach()
最初のパラメーターは、行の入力配列です。
2番目のパラメーターは、出力配列の値になる列です。
3番目のパラメーターは、出力配列のキーになる列です。
コード:(デモ)
$array = [
['id' => 1, 'key' => 'foo', 'data' => 'a'],
['id' => 2, 'key' => 'bar', 'data' => 'b'],
['id' => 3, 'key' => 'barf', 'data' => 'c'],
];
var_export(
array_column($array, 'data', 'id')
);
出力:
array (
1 => 'a',
2 => 'b',
3 => 'c',
)
新しい第1レベルのキーを割り当てたいが、行は変更しない場合null
は、ネイティブ関数呼び出しの2番目のパラメーターとして記述します。
コード:(デモ)
var_export(
array_column($array, null, 'id')
);
出力:
array (
1 =>
array (
'id' => 1,
'key' => 'foo',
'data' => 'a',
),
2 =>
array (
'id' => 2,
'key' => 'bar',
'data' => 'b',
),
3 =>
array (
'id' => 3,
'key' => 'barf',
'data' => 'c',
),
)
あまり実現されていない、機能のない手法は、ボディのないforeach()
ループ内で配列の破棄を使用することです。(デモ)
$array = [
['id' => 1, 'data' => 'a'],
['id' => 2, 'data' => 'b'],
['id' => 3, 'data' => 'c'],
];
$result = [];
foreach ($array as ['id' => $id, 'data' => $result[$id]]);
var_export($result);
これは、これをアドバイスする以前の回答と同等です。
foreach ($array as $row) {
$result[$row['id']] = $row['data'];
}
出力:
array (
1 => 'a',
2 => 'b',
3 => 'c',
)