【问题标题】:Group Simple Array PHP分组简单数组 PHP
【发布时间】:2019-01-02 17:34:53
【问题描述】:

在对简单数组进行分组时遇到问题。想对大小和数量进行分组。这些是鞋码。

这是我的数组:

Array
(
[0] => Array
    (
        [sku] => '82368-21'
        [size] => 36
        [quantity] => 1
    )

[1] => Array
    (
        [sku] => '82368-21'
        [size] => 36
        [quantity] => 3
    )

[2] => Array
    (
        [sku] => '82368-22'
        [size] => 38
        [quantity] => 0
    )

[3] => Array
    (
        [sku] => '82368-23'
        [size] => 39
        [quantity] => 2
    )

[4] => Array
    (
        [sku] => '82368-23'
        [size] => 39
        [quantity] => 1
    )
)

如您所见,鞋子有多种尺寸和数量。那里 无需删除任何重复项,因为它们都应按大小分组。 我想输出以下内容:

 Array
(
[0] => Array
    (
        [sku] => '82368-21'
        [size] => 36
        [quantity] => 4
    )


[1] => Array
    (
        [sku] => '82368-22'
        [size] => 38
        [quantity] => 0
    )

[2] => Array
    (
        [sku] => '82368-23'
        [size] => 39
        [quantity] => 3
    )
)

【问题讨论】:

  • 你试过什么? PS。我已经解决了。
  • 检查this - 我认为这是同一个问题......
  • @DavidWinder - 它很相似,但所需的输出非常不同。
  • 也许输出不同,但到达那里的方式是一样的——我希望 OP 自己做。请注意,那里的其他一些答案给出的输出与此处要求的输出相同

标签: php arrays


【解决方案1】:

你可以用一个简单的 foreach 循环来做到这一点:

 $array = array (
    0 => 
    array (
        'size' => 36,
        'quantity' => 1
    ),
    1 => 
    array (
        'size' => 36,
        'quantity' => 3
    ),
    2 => 
    array (
        'size' => 38,
        'quantity' => 0
    ),
    3 => 
    array (
        'size' => 39,
        'quantity' => 2
    ),
    4 => 
    array (
        'size' => 39,
        'quantity' => 1
    )
);

$out = [];

foreach($array as $value){

    $key = $value['size'];
    if(!isset($out[$key])){
        $out[$key] = $value;
    }else{
        $out[$key]['quantity'] += $value['quantity'];
    }
}

print_r($out);

输出

Array
(
    [36] => Array
        (
            [size] => 36
            [quantity] => 4
        )

    [38] => Array
        (
            [size] => 38
            [quantity] => 0
        )

    [39] => Array
        (
            [size] => 39
            [quantity] => 3
        )

)

Sandbox

我认为您缺少的是使用 size 作为密钥。对于数组,当您想通过单个值匹配对事物进行分组或组合时,最好采用该值并将其用作数组键。这只会使在输出数组中找到组变得更容易。完成后,您可以随时使用array_values 将键重置为“正常”编号的索引。

 //reset the array keys
 $out = array_values($out);
 print_r($out);

输出

Array
(
    [0] => Array
        (
            [size] => 36
            [quantity] => 4
        )

    [1] => Array
        (
            [size] => 38
            [quantity] => 0
        )

    [2] => Array
        (
            [size] => 39
            [quantity] => 3
        )

)

Sandbox

干杯

【讨论】:

  • 这太棒了,谢谢!如果我想添加另一个键怎么办,比如我编辑的问题。添加[sku]也..?
  • 哦,它是在没有改变任何东西的情况下添加的。谢谢!
猜你喜欢
  • 2011-12-20
  • 1970-01-01
  • 2011-03-12
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
相关资源
最近更新 更多