2017-04-11 120 views
-1

結合我有一個數組如下如何數組具有相同索引

[{"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]}] 

是那裏的值相同的索引合併任何可能的方式?

+0

您的陣列具有相同的密鑰,但差異值,比如說第一物鏡鍵:2 = 2,但後來它的[5,6,9] ,,顯示我們想以什麼格式結尾.. –

回答

2

是的,這是可能的解碼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]}]

+0

array_merge():參數#1不是數組,我試過你的解決方案,但我的數組不是字符串..它是一個數組, – CodeGG

+0

@ Matei-Mihai:如果我可以比如說,你甚至可以在第7行執行'sort($ carry [$ key] - > $ key,SORT_NUMERIC);並且按照@ Beshoy-Girgis的方式獲得數組:#^^ – OldPadawan

+0

我自己做錯了,您的解決方案正常工作。感謝matei !! – CodeGG

0
<?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); 
0

這是另一種選項:

$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]} 
相關問題