我有两个数组,如下所示。我需要合并数组的内容,以便最终得到第三个数组中显示的结构。我检查过array_merge,但无法弄清楚这是可能的。任何帮助赞赏。感谢。
array(
(int) 0 => array(
'gross_value' => '100',
'quantity' => '1'
),
(int) 1 => array(
'gross_value' => '200',
'quantity' => '1'
)
)
array(
(int) 0 => array(
'item_title_id' => '1',
'order_id' => '4'
),
(int) 1 => array(
'item_title_id' => '2',
'order_id' => '4'
)
)
我应该得到像这样的合并数组
array(
(int) 0 => array(
'gross_value' => '100',
'quantity' => '1',
'item_title_id' => '1',
'order_id' => 4
),
(int) 1 => array(
'gross_value' => '200',
'quantity' => '1',
'item_title_id' => '2',
'order_id' => 4
)
)
答案 0 :(得分:2)
将所有数字键转换为字符串,(make为关联数组)
$result = array_merge_recursive($ar1, $ar2);
print_r($result);
答案 1 :(得分:1)
怎么样:
$arr1 = array(
0 => array(
'gross_value' => '100',
'quantity' => '1'
),
1 => array(
'gross_value' => '200',
'quantity' => '1'
)
);
$arr2 = array(
0 => array(
'item_title_id' => '1',
'order_id' => '4'
),
1 => array(
'item_title_id' => '2',
'order_id' => '4'
)
);
$arr = array();
foreach($arr1 as $k => $v) {
array_push($arr, array_merge($v, $arr2[$k]));
}
print_r($arr);
<强>输出:强>
Array
(
[0] => Array
(
[gross_value] => 100
[quantity] => 1
[item_title_id] => 1
[order_id] => 4
)
[1] => Array
(
[gross_value] => 200
[quantity] => 1
[item_title_id] => 2
[order_id] => 4
)
)
答案 2 :(得分:0)
我可能会迭代数组并手动合并它们。
$result = array();
foreach ( $array1 as $key => $item )
{
$result[$key] = array_merge($array1[$key], $array2[$key]);
}
如果顶级数组没有严格匹配的键,则会出现问题。
答案 3 :(得分:0)
如果你有$ array1和$ array2,试试这个:
foreach($array1 as $key1=>$innerArray){
$array1[$key1]['item_title_id'] = $array2[$key1]['item_title_id'];
$array1[$key1]['order_id'] = $array2[$key1]['order_id'];
}
答案 4 :(得分:0)
合并递归之类的问题是他们不知道何时停止。
在某些情况下,您希望停止遍历数组,只需获取给定值(如果存在)。
例如,如果您必须覆盖嵌套的配置数组,则可能不希望默认密钥在特定级别上保留。
这是我的解决方案:
public static function merge_lvl2(){
$args = func_get_args();
return static::merge($args, 2);
}
public static function merge($args, $maxDepth = null, $depth = 1)
{
$merge = [];
foreach($args as $arg) {
if (is_array($arg)) {
if (is_array($merge)) {
if ($maxDepth == $depth) {
$arg += $merge;
$merge = $arg;
} else {
$merge = array_merge($merge, $arg);
}
} else {
$merge = $arg;
}
}
}
if ($maxDepth !== $depth) {
foreach($args as $a) {
if (is_array($a)) {
foreach($a as $k => $v) {
if (isset($merge[$k]) && is_array($merge[$k])) {
$merge[$k] = static::merge([$merge[$k], $v], $maxDepth, $depth + 1);
}
}
}
}
}
return $merge;
}
您可以根据需要传递任意数量的数组进行合并。
$merged = ClassName::merge_lvl2([..array1..], [..array2..], [..array3..], etc...);
它将停止在第2级合并,并接受该键的最后一个实例作为覆盖而不是合并。
您也可以直接使用args数组调用merge并设置最大深度。
如果没有设置最大深度,它将遍历整个阵列。