我有这个简单的设置:
$array1 = array(0 => array(0 => array('amount' => '49')));
$array2 = array(0 => array(0 => array('amount' => '149')));
$mergetest = array_merge_recursive($array1, $array2);
输出:
array(2) {
[0]=>
array(1) {
[0]=>
array(1) {
["amount"]=>
string(2) "49"
}
}
[1]=>
array(1) {
[0]=>
array(1) {
["amount"]=>
string(3) "149"
}
}
}
它应该以这种方式合并,输出应该是这样的:
array(1) {
[0]=>
array(2) {
[0]=>
array(1) {
["amount"]=>
string(2) "49"
}
[1]=>
array(1) {
["amount"]=>
string(3) "149"
}
}
}
由于数组索引0已经存在,其中的数组也是如此 - 所以它应该通过子数组而不是父数组匹配,并以这种方式将下一个子数组添加到它。
这可以以干净的方式完成而无需构建循环并检查的自定义函数吗?
更新
解决方案,也适用于:
$array1 = array(0 => array(0 => array('amount' => '49')));
$array2 = array(1243 => array(0 => array('amount' => '49'), 1 => array('amount' => '449')));
预期输出位于单独的父数组(0和1243)中,就像上面的第一个输出一样。
答案 0 :(得分:1)
<?php
$array1 = array(0 => array(0 => array('amount' => '49')));
$array2 = array(0 => array(0 => array('amount' => '149')));
$result = array_map('array_merge', $array1, $array2);
var_dump($result);
?>
输出如下所示。
array(1) {
[0]=>
array(2) {
[0]=>
array(1) {
["amount"]=>
string(2) "49"
}
[1]=>
array(1) {
["amount"]=>
string(3) "149"
}
}
}
注意:array_merge_recursive()会失败,因为它会附加数字键,而不是合并它们:
更新不同指数的阵列答案
<?php
$array1 = array(0 => array(0 => array('amount' => '49')));
$array2 = array(1243 => array(0 => array('amount' => '49'), 1 => array('amount' => '449')));
$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];
}
}
var_dump($array3);
?>
输出将是
array(2) {
[0]=>
array(1) {
[0]=>
array(1) {
["amount"]=>
string(2) "49"
}
}
[1243]=>
array(2) {
[0]=>
array(1) {
["amount"]=>
string(2) "49"
}
[1]=>
array(1) {
["amount"]=>
string(3) "449"
}
}
}
答案 1 :(得分:0)
如果在顶级使用字符串键而不是整数,则可以获得所需的结果。
您有两个级别的整数索引数组,但似乎它们具有不同的性质,因为您需要以不同方式合并它们。 PHP无法知道这一点,因此使用此设置,没有标准功能可以满足您的需求。您需要更改数据结构以标记差异(例如,通过在第一级使用字符串键和在第二级使用整数)或在此处编写自定义合并功能。