我有这个数组:
Array
(
[0] => Array
(
[id] => 99
[fruit] => Apple
[color] => Green
)
[1] => Array
(
[id] => 99
[fruit] => Apple
[color] => Red
)
[2] => Array
(
[id] => 555
[fruit] => Banada
[color] => Yellow
)
)
我需要通过合并id
的项目来从此数组创建一个新数组。
因此,最终输出如下:
Array
(
[99] => Array
(
[id] => 99
[fruit] => Apple
[color] => Green
),
(
[id] => 99
[fruit] => Apple
[color] => Red
)
[555] => Array
(
[id] => 555
[fruit] => Banada
[color] => Yellow
)
)
谢谢。
答案 0 :(得分:2)
您应该创建一个新数组来保存结果并遍历输入,将每个元素添加到新数组中。注意PHP是如何自动创建子数组的。
<JdeVariable>
<ns0:JDE>
<ns0:JdeNumber>39184</ns0:JdeNumber>
</ns0:JDE>
<ns0:JDE>
<ns0:JdeNumber>39186</ns0:JdeNumber>
</ns0:JDE>
</JdeVariable>
答案 1 :(得分:0)
<?php
function merge_array_by_key($arrays)
{
$new_array = [];
foreach($arrays as $array)
{
$new_array[$array["id"]] = $array;
}
return $new_array;
}
希望这行得通!
答案 2 :(得分:0)
您不必循环数组的每个项目。
如果使用array_column和array_intersect(_key),则只需要循环数组中的唯一ID。
我添加array_values只是为了确保您获得0个索引数组,但是如果这不重要,则可以将其删除。
$ids = array_column($arr, "id");
Foreach(array_unique($ids) as $id){
$new[$id] = array_values(array_intersect_key($arr, array_intersect($ids, [$id])));
}
Var_dump($new);
$ids = array_column($arr, "id");
Foreach(array_unique($ids) as $id){
$temp = array_values(array_intersect_key($arr, array_intersect($ids, [$id])));
$new[$id] = ['fruit' => $temp[0]['fruit'], 'color' => array_column($temp, "color")];
}
Var_dump($new);
这将输出:
array(2) {
[99]=>
array(2) {
["fruit"]=>
string(5) "Apple"
["color"]=>
array(2) {
[0]=>
string(5) "Green"
[1]=>
string(3) "Red"
}
}
[555]=>
array(2) {
["fruit"]=>
string(6) "Banana"
["color"]=>
array(1) {
[0]=>
string(6) "Yellow"
}
}
}