结合我有一个数组如下如何数组具有相同索引
[{"2":[2]},{"9":[4,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,30,32,33,34,36,41]},{"2":[5,6,9]},{"7":[7,8]},{"9":[3]}]
是那里的值相同的索引合并任何可能的方式?
结合我有一个数组如下如何数组具有相同索引
[{"2":[2]},{"9":[4,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,30,32,33,34,36,41]},{"2":[5,6,9]},{"7":[7,8]},{"9":[3]}]
是那里的值相同的索引合并任何可能的方式?
是的,这是可能的解码JSON字符串并且使用array_reduce:
$arr = json_decode('[{"2":[2]},{"9":[4,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,30,32,33,34,36,41]},{"2":[5,6,9]},{"7":[7,8]},{"9":[3]}]');
$arr = array_reduce($arr, function ($carry, $item) {
$key = key($item);
if (isset($carry[$key])) {
$carry[$key]->$key = array_merge($carry[$key]->$key, $item->$key);
} else {
$carry[$key] = $item;
}
return $carry;
});
echo json_encode(array_values($arr));
结果是:
[{ “2”:[2,5,6,9]} ,{ “9”:[4,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,30,32,33 ,34,36,41,3]},{ “7”:[7,8]}]
array_merge():参数#1不是数组,我试过你的解决方案,但我的数组不是字符串..它是一个数组, – CodeGG
@ Matei-Mihai:如果我可以比如说,你甚至可以在第7行执行'sort($ carry [$ key] - > $ key,SORT_NUMERIC);并且按照@ Beshoy-Girgis的方式获得数组:#^^ – OldPadawan
我自己做错了,您的解决方案正常工作。感谢matei !! – CodeGG
<?php
$json = '[{"2":[2]},{"9":[4,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,30,32,33,34,36,41]},{"2":[5,6,9]},{"7":[7,8]},{"9":[3]}]';
$multi_array = json_decode($json, true);
$result = [];
foreach($multi_array as $arr)
{
foreach($arr as $k => $v)
{
$temp = isset($result[$k]) ? $result[$k] : [];
$result[$k] = array_merge($temp, $v);
}
}
print_r($result);
这是另一种选项:
$old = json_decode('[{"2":[2]},{"9":[4,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,30,32,33,34,36,41]},{"2":[5,6,9]},{"7":[7,8]},{"9":[3]}]', true);
$new = [];
array_map(function ($arr) use (&$new) {
$key = key($arr);
$new[$key] = array_merge(current($arr), !empty($new[$key]) ? $new[$key] : []);
}, $old);
echo json_encode($new);
输出:
{"2":[5,6,9,2],"9":[3,4,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,30,32,33,34,36,41],"7":[7,8]}
您的阵列具有相同的密钥,但差异值,比如说第一物镜键:2 = 2,但后来它的[5,6,9] ,,显示我们想以什么格式结尾.. –