我有以下数组:
$array1 = "
Array (
[0] => Array (
[0] => Value1
[1] => Value2
)
[1] => Array (
[0] => Value3
[1] => Value4
)
[2] => Array (
[0] => Value5
[1] => Value6
)
...
[999] => Array (
[0] => Value7
[1] => Value8
)
)
和
$array2 = "
Array (
[0] => Array (
[0] => ValA
[1] => ValB
[2] => ValC
[3] => ValD
)
[1] => Array (
[0] => ValE
[1] => ValF
[2] => ValG
[3] => ValH
)
[2] => Array (
[0] => ValI
[1] => ValJ
[2] => ValK
[3] => ValL
)
...
[999] => Array (
[0] => ValM
[1] => ValN
[2] => ValO
[3] => ValP
)
)
我想合并两个数组,以便最终我有相同的结构,第一级的键数,但值将是#34;加入"在第二级,就像我们在下面的结果数组中看到的那样:
$array3 = "
Array (
[0] => Array (
[0] => Value1
[1] => Value2
[2] => ValA
[3] => ValB
[4] => ValC
[5] => ValD
)
[1] => Array (
[0] => Value3
[1] => Value4
[2] => ValE
[3] => ValF
[4] => ValG
[5] => ValH
)
[2] => Array (
[0] => Value5
[1] => Value6
[2] => ValI
[3] => ValJ
[4] => ValK
[5] => ValL
)
...
[999] => Array (
[0] => Value7
[1] => Value8
[2] => ValM
[3] => ValN
[4] => ValO
[5] => ValP
)
)
我尝试使用array_merge和array_merge_recursive,如此解决方案中所示:https://stackoverflow.com/a/16541831/3499881,但它没有用。
我真的必须将所有数字键转换为字符串,还是以某种方式也可以使用该键?如果这是唯一的方法,请你告诉我如何转换它?
或者引起的问题是因为在第一个数组中有2个键而在第二个4中?
我很感激任何线索。非常感谢提前。
答案 0 :(得分:4)
有一个优雅的"解决问题的方法(但是,它需要两个数组必须具有相同的项目数):
$result = array_map('array_merge', $array1, $array2);
检查fiddle。
回答您的问题:array_merge_recursive()
会失败,因为附加数字键,而不是合并它们:
如果输入数组具有相同的字符串键,则为其值 这些键合并到一个数组中,这样就完成了 递归地,如果其中一个值是一个数组本身,那么 函数将它与另一个数组中的相应条目合并 太。但是,如果数组具有相同的数字键,则后者 值不会覆盖原始值,但会被追加。
答案 1 :(得分:3)
您可以循环$array1
,并在$array2
中合并密钥匹配的位置:
$array3 = array();
foreach ($array1 as $key => $a1) {
if (array_key_exists($key, $array2)) {
$array3[$key] = array_merge($a1, $array2[$key]);
} else {
$array3[$key] = $a1;
}
}
上述唯一的限制是,如果$array2
中存在密钥,但$array1
中不存在密钥,则不会将它们添加到数组中(在您的情况下这不是问题)。另一个解决方案是从两个数组中收集所有键,然后循环并执行合并:
$keys = array_unique(array_merge(array_keys($array1), array_keys($array2)));
foreach ($keys as $key) {
if (array_key_exists($key, $array1) && array_key_exists($key, $array2)) {
$array3[$key] = array_merge($array1[$key], $array2[$key]);
} elseif (array_key_exists($key, $array1)) {
$array3[$key] = $array1[$key];
} else {
$array3[$key] = $array2[$key];
}
}