我有一个简单的设置:
$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)中,就像上面的第一个输出一样。
发布于 2017-10-25 10:36:59
<?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"
}
}
}发布于 2017-10-25 10:23:19
如果在顶层使用字符串键而不是整数,则可以得到所需的结果。
您有两个级别的整数索引数组,但在您看来,它们具有不同的性质,因为您需要以不同的方式合并它们。PHP无法知道这一点,因此在这种设置下,没有任何标准函数能够满足您的需要。您需要更改数据结构来标记这种差异(例如,在第一级使用字符串键,在第二级使用整数),或者在这里编写自定义的合并函数。
https://stackoverflow.com/questions/46929570
复制相似问题