组简单数组PHP

时间:2019-01-02 17:34:53

标签: php arrays

在对简单数组进行分组时存在一些问题。想将大小和总和分组。这些是鞋子的尺码。

这是我的数组:

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
    )
)

1 个答案:

答案 0 :(得分: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

欢呼