Php 需要将数组与匹配的值合并
我有一个这样的数组,如何得到新数组Php 需要将数组与匹配的值合并,php,arrays,Php,Arrays,我有一个这样的数组,如何得到新数组 Array ( [0] => Array ( [model] => MX555 [color] => RED [qty] => 2 ) [1] => Array ( [model] => MX555 [color] => RED
Array
(
[0] => Array
(
[model] => MX555
[color] => RED
[qty] => 2
)
[1] => Array
(
[model] => MX555
[color] => RED
[qty] => 2
)
[2] => Array
(
[model] => MX555
[color] => Green
[qty] => 2
)
[3] => Array
(
[model] => MX555
[color] => Green
[qty] => 1
)
)
我需要像这样返回数组
Array
(
[0] => Array
(
[model] => MX555
[color] => RED
[qty] => 4
)
[1] => Array
(
[model] => MX555
[color] => Green
[qty] => 4
)
)
按元素分组的数量总和
根据您的问题,可以推断您希望添加类似项目的数量
如果是这种情况,那么您可以使用以下代码段实现它
在下面的代码片段中,我使用元素color
对项目进行了分组
请根据您的要求随意更改
片段
$group_by = 'color';
foreach ($data as $item) {
if (!isset($res[$item[$group_by]])) {
$res[$item[$group_by]] = $item;
} else {
$res[$item[$group_by]]['qty'] += $item['qty'];
}
}
Array
(
[0] => Array
(
[model] => MX555
[color] => RED
[qty] => 4
)
[1] => Array
(
[model] => MX555
[color] => Green
[qty] => 3
)
)
代码
$data = [
[
'model' => "MX555",
'color' => "RED",
'qty' => 2,
],
[
'model' => "MX555",
'color' => "RED",
'qty' => 2,
],
[
'model' => "MX555",
'color' => "Green",
'qty' => 2,
],
[
'model' => "MX555",
'color' => "Green",
'qty' => 1,
],
];
$res = [];
$group_by = 'color';
foreach ($data as $item) {
if (!isset($res[$item[$group_by]])) {
$res[$item[$group_by]] = $item;
} else {
$res[$item[$group_by]]['qty'] += $item['qty'];
}
}
print_r(array_values($res));
输出
$group_by = 'color';
foreach ($data as $item) {
if (!isset($res[$item[$group_by]])) {
$res[$item[$group_by]] = $item;
} else {
$res[$item[$group_by]]['qty'] += $item['qty'];
}
}
Array
(
[0] => Array
(
[model] => MX555
[color] => RED
[qty] => 4
)
[1] => Array
(
[model] => MX555
[color] => Green
[qty] => 3
)
)
我假设您希望通过多个值来识别重复的项目,在这种情况下,
model
和color
(如果您只希望通过单个值color
进行分组,请参见RamC的答案)。一种方法是创建一个数组,其中每个键都是通过连接这些值来创建的:
function mergeQuantitiesByModelAndColor(array $array)
{
$merged_array = array();
foreach ($array as $item) {
$key = $item['model'] . '|' . $item['color'];
if (!isset($merged_array[$key])) {
$merged_array[$key] = $item;
} else {
$merged_array[$key]['qty'] += $item['qty'];
}
}
return array_values($merged_array);
}
当按照以下方式进行测试时(php 5.6):
给出输出:
array(2) {
[0]=>
array(3) {
["model"]=>
string(5) "MX555"
["color"]=>
string(3) "RED"
["qty"]=>
int(4)
}
[1]=>
array(3) {
["model"]=>
string(5) "MX555"
["color"]=>
string(5) "Green"
["qty"]=>
int(3)
}
}
而且。。。你有什么问题?你到底想实现什么?是否返回所选索引?很抱歉,这个问题不清楚。我将如何从此创建新数组?对于数组中的第二个索引,我猜数量应该是3?是的,数量将是3,但我将如何创建此数组