我有一个多维索引数组。每个元素都是一个带有id
列的关联数组,它在元素之间是唯一的(它的值永远不会在数组中重复)。
[indexed] =>Array
(
[0] => Array
(
[id] => john
[name] => John
[age] => 29
),
[1] => Array
(
[id] => peter
[name] => Peter
[age] => 30
),
[2] => Array
(
[id] => harry
[name] => Harry
[age] => 19
)
)
我的目标是将此数组转换为多维关联数组,并按id
值编制索引。
[indexed] =>Array
(
[john] => Array
(
[id] => john
[name] => John
[age] => 29
),
[peter] => Array
(
[id] => peter
[name] => Peter
[age] => 30
),
[harry] => Array
(
[id] => harry
[name] => Harry
[age] => 19
)
)
到目前为止,我最好的尝试是遍历数组元素并手动创建最终数组。
$associative = array();
foreach($indexed as $key=>$val) $associative[$val['id']] = $val;
我认为这不是最优雅的解决方案。是否可以通过内置(更高效)的功能获得相同的结果?
答案 0 :(得分:2)
事实是 php确实提供了一个单一的本机函数,可让您用单个列的值替换外部索引。 “魔术”位于第二个参数中,该参数告诉php在分配新键时不要触摸子数组值。
代码:(Demo)
$indexed = [
['id' => 'john', 'name' => 'John', 'age' => 29],
['id' => 'peter', 'name' => 'Peter', 'age' => 30],
['id' => 'harry', 'name' => 'Harry', 'age' => 19],
];
var_export(array_column($indexed, null, 'id'));
输出:
array (
'john' =>
array (
'id' => 'john',
'name' => 'John',
'age' => 29,
),
'peter' =>
array (
'id' => 'peter',
'name' => 'Peter',
'age' => 30,
),
'harry' =>
array (
'id' => 'harry',
'name' => 'Harry',
'age' => 19,
),
)
答案 1 :(得分:1)
这是另一种方法(假设$arr
是你的原始数组):
$associative = array_combine(array_map(function($item) { return $item['id']; }, $arr), $arr);
但我认为使用foreach仍然比这更短,更易读。