2016-02-25 60 views
-2

我有2阵列具有以下示例结构:合并2个数组在PHP

$json1 = '[[ 
{ 
    "Str1":"ABC", 
    "Str2": "Some Value", 
    "Str3": "Something" 
}, 
{ 
    "Str1": "DEF", 
    "Str2": "Another Value", 
    "Str3": "Test" 
}, 
{ 
    "Str1": "GHI", 
    "Str2": "NULL", 
    "Str3": "Blah" 
}]]'; 

$json2 = '[{ 
    "ID": "1", 
    "ABC": "Hello", 
    "DEF": "Test", 
    "GHI": "Something" 
}]'; 


$arr1 = json_decode($json1); 
$arr2 = json_decode($json2); 

我希望他们用PHP加盟“的关键”。键是IDABCDEF,(仅作为示例名)等

中的键是阵列的名称在阵列1。另外,Array 2中的每个阵列的第一个条目是。不幸的是,它们的顺序不同。

所以我需要迭代两个阵列,并检查密钥是相同的,如果是这样的值复制阵列2阵列1的。事情是这样的:

if($array1[$key] == $array2[$key]){ 
    $array1[$key] += $array2[$key]; 
} 

期望的结果只是一些阵列合并在一起,通过他们的 “钥匙”:

[0] => array(4){ 
"ABC" => "Hello", 
"Str 1" => "ABC", 
"Str 2" => "Some Value", 
"Str 3" => "Something" 
} 
[1] => array(4){ 
"DEF" => "Test", 
"Str 1" => "DEF", 
"Str 2" => "Another Value", 
"Str 3" => "Test" 
} 
[2] ... 
+0

我想这是一个错误的方法 – phaberest

+3

请发布您想要的输出。 –

+0

请张贴一个连贯的例子:两个输入数组=>所需数组 – fusion3k

回答

0

这是我的解决方案:

foreach ($arr1[0] as $key => $entry) { 
    $arr1[0][$key][$arr1[0][$key]["Str1"]] = $arr2[0][$entry["Str1"]]; 
} 

这产生了foll欠款输出:

[ 
    [ 
     { 
     "Str1":"ABC", 
     "Str2":"Some Value", 
     "Str3":"Something", 
     "ABC":"Hello" 
     }, 
     { 
     "Str1":"DEF", 
     "Str2":"Another Value", 
     "Str3":"Test", 
     "DEF":"Test" 
     }, 
     { 
     "Str1":"GHI", 
     "Str2":"NULL", 
     "Str3":"Blah", 
     "GHI":"Something" 
     } 
    ] 
] 
0

试试这个:

$json1 = '[[ 
{ 
    "Str1":"ABC", 
    "Str2": "Some Value", 
    "Str3": "Something" 
}, 
{ 
    "Str1": "DEF", 
    "Str2": "Another Value", 
    "Str3": "Test" 
}, 
{ 
    "Str1": "GHI", 
    "Str2": "NULL", 
    "Str3": "Blah" 
}]]'; 

$json2 = '[{ 
    "ID": "1", 
    "ABC": "Hello", 
    "DEF": "Test", 
    "GHI": "Something" 
}]'; 


$arr1 = json_decode($json1, true); 
$arr2 = json_decode($json2, true); 

$arr_merged = array_fill_keys(array_keys($arr2[0], null); 
foreach($json2[0] as $k => $v) { 
     $arr_merged[$k] => array($v); 
} 
foreach($json1 as $src) { 
    $key = $json1['Str1']; 
    if(!array_key_exists($key, $arr_merged)) { 
     $arr_merged[$key] = array(); 
    } 
    foreach($src as $k => $v) { 
     $arr_merged[$key][$k] = $v; 
    } 
}