Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 需要将数组与匹配的值合并_Php_Arrays - Fatal编程技术网

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,但我将如何创建此数组