它更优雅/富有表现力/现代/简洁,array_column()
而不是foreach()
用于此任务。
第一个参数是行的输入数组。
第二个参数是要成为输出数组中的值的列。
第三个参数是要成为输出数组中键的列。
代码:(演示)
$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',
)
如果您想分配新的第一级键但保持行不变,您可以编写null
为本机函数调用的第二个参数。
代码:(演示)
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',
)