我有3个数组,如下所示:
数组1:
array 1: [
0 => array[
"product_id" => "a"
"quantity_1" => "1"
]
1 => array[
"product_id" => "b"
"quantity_1" => "2"
]
2 => array[
"product_id" => "c"
"quantity_1" => "1"
]
]
数组2:
array 2: [
0 => array[
"product_id" => "a"
"quantity_2" => "1"
]
1 => array[
"product_id" => "d"
"quantity_2" => "2"
]
]
我想要的结果是:
array 3: [
0 => array[
"product_id" => "a"
"quantity_1" => "1"
"quantity_2" => "1"
]
1 => array[
"product_id" => "b"
"quantity_1" => "2"
]
2 => array[
"product_id" => "c"
"quantity_1" => "1"
]
3 => array[
"product_id" => "d"
"quantity_2" => "2"
]
]
我尝试使用array_combine()函数,但结果与预期不符
任何帮助,不胜感激!非常感谢!
答案 0 :(得分:5)
如果您愿意将product_id用作密钥,则可以这样做:
$a = [
0 => [
"product_id" => "a",
"quantity_1" => "1"
],
1 => [
"product_id" => "b",
"quantity_1" => "2"
],
2 => [
"product_id" => "c",
"quantity_1" => "1"
]
];
$b = [
0 => [
"product_id" => "a",
"quantity_2" => "1"
],
1 => [
"product_id" => "d",
"quantity_2" => "2"
]
];
print_r(
array_replace_recursive(
array_column($a, null, 'product_id'),
array_column($b, null, 'product_id')
)
);
输出
Array
(
[a] => Array
(
[product_id] => a
[quantity_1] => 1
[quantity_2] => 1
)
[b] => Array
(
[product_id] => b
[quantity_1] => 2
)
[c] => Array
(
[product_id] => c
[quantity_1] => 1
)
[d] => Array
(
[product_id] => d
[quantity_2] => 2
)
)
您始终可以使用array_values
从结果中删除键,如下所示:
print_r(
array_values(
array_replace_recursive(
array_column($a, null, 'product_id'),
array_column($b, null, 'product_id')
)
)
);
-注意-product_id在每个数组中必须是唯一的,才能正常工作。否则,您可以简单地通过foreach循环来做到这一点。
$c = [];
foreach(array_merge($a,$b) as $v){
$k = $v['product_id'];
if(!isset($c[$k])){
$c[$k] = $v;
}else{
$c[$k] = array_merge($c[$k],$v);
}
}
print_r($c);
我会发布输出,但是它是相同的:)-这就是重点。另外,我更喜欢参考一些键。它可以使代码维护更加容易。