PHP - 合并和合并数组
PHP - Merge and Combine Array
我有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() 函数,但结果不如预期
非常感谢任何帮助!非常感谢!
如果您愿意将 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_ids 在每个数组中必须是唯一的,这样才能工作。否则你可以简单地用一个 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);
我会 post 输出,但它是一样的 :) - 这就是重点。此外,我更喜欢尽可能多地引用键。它可以使维护代码更容易一些。
我有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() 函数,但结果不如预期
非常感谢任何帮助!非常感谢!
如果您愿意将 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_ids 在每个数组中必须是唯一的,这样才能工作。否则你可以简单地用一个 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);
我会 post 输出,但它是一样的 :) - 这就是重点。此外,我更喜欢尽可能多地引用键。它可以使维护代码更容易一些。