如何合并多维数组中的重复条目?

时间:2018-02-27 13:11:12

标签: php sorting multidimensional-array

我创建了一个多维数组,以便稍后从数据中创建一个commisioning列表。为此,我必须将条目加倍并相应地增加数量。 origin数组的结构如下:

Array
(
    [0] => Array
        (
            [id] => 272050402526
            [bezeichnung] => Tom Cococha Kokoskohle Coco Gold Shishakohle Naturkohle Shisha Kohle Würfel 1 Kg
            [stueckzahl] => 1
        )

    [1] => Array
        (
            [id] => 281881151709
            [bezeichnung] => Tom Cococha - Naturkohle Grün 1 kg
            [stueckzahl] => 1
        )

    [2] => Array
        (
            [id] => 281653408911
            [bezeichnung] => 50 actiTube SLIM Aktivkohlefilter Aktivkohle Filter Tune Kohle Slimfilter (7 mm)
            [stueckzahl] => 1
        )

    [3] => Array
        (
            [id] => 281881151709
            [bezeichnung] => Tom Cococha - Naturkohle Grün 1 kg
            [stueckzahl] => 1
        )

)

现在我想合并重复的条目并相应地合并数字。我的失败方法如下:

$secarr = array();
        foreach ($arr as $key => $value) {
            if($key == 0){
                array_push($secarr, $value);
            }else{
                foreach ($secarr as $seckey => $secvalue) {
                    if(in_array($value['bezeichnung'], $secvalue) == TRUE){
                        $secarr[$seckey]['stueckzahl'] = $secvalue['stueckzahl'] + $value['stueckzahl'];
                        continue 2;
                    }else{
                        array_push($secarr, $value);
                        continue 2;
                    }
                }
            }
        }

输出应如下所示:

Array
(
    [0] => Array
        (
            [id] => 272050402526
            [bezeichnung] => Tom Cococha Kokoskohle Coco Gold Shishakohle Naturkohle Shisha Kohle Würfel 1 Kg
            [stueckzahl] => 1
        )

    [1] => Array
        (
            [id] => 281881151709
            [bezeichnung] => Tom Cococha - Naturkohle Grün 1 kg
            [stueckzahl] => 2
        )

    [2] => Array
        (
            [id] => 281653408911
            [bezeichnung] => 50 actiTube SLIM Aktivkohlefilter Aktivkohle Filter Tune Kohle Slimfilter (7 mm)
            [stueckzahl] => 1
        )
)

有人可以帮助我吗?

祝你好运, 帕斯卡

1 个答案:

答案 0 :(得分:1)

这样就可以了。

$output = [];
foreach ($input as $item) {
    if (array_key_exists($item['id'], $output)) {
        $output[$item['id']]['stueckzahl'] += $item['stueckzahl'];
    } else {
        $output[$item['id']] = $item;
    }
}

print_r($output);

您可以在此处在线运行:http://sandbox.onlinephpfunctions.com/code/4cd9a253538931250867099305c9741c83c2e52f

编辑以回应杰夫的意见。他可能是对的;那更像是你所追求的。