首页 > 解决方案 > 根据某些条件从数组中删除一些行

问题描述

我有一个数组,其中包含三列 ID、产品代码、库存

如何从数组中删除旧的股票条目?

我可以通过循环删除它,但寻找简单的解决方案。

大批

Array
(
    [0] => Array
        (
            [Id] => 1
            [ProductCode] => 4353
            [TotalStock] => 10
        )

    [1] => Array
        (
            [Id] => 1
            [ProductCode] => 4354
            [TotalStock] => 80
        )

    [2] => Array
        (
            [Id] => 1
            [ProductCode] => 4353
            [TotalStock] => 60
        )

    [3] => Array
        (
            [Id] => 1
            [ProductCode] => 4355
            [TotalStock] => 30
        )

    [4] => Array
        (
            [Id] => 1
            [ProductCode] => 4353
            [TotalStock] => 20
        )

    [5] => Array
        (
            [Id] => 1
            [ProductCode] => 4356
            [TotalStock] => 40
        )

)

预期产出

Array
(
    [0] => Array
        (
            [Id] => 1
            [ProductCode] => 4354
            [TotalStock] => 80
        )

    [1] => Array
        (
            [Id] => 1
            [ProductCode] => 4355
            [TotalStock] => 30
        )

    [2] => Array
        (
            [Id] => 1
            [ProductCode] => 4353
            [TotalStock] => 60
        )

    [3] => Array
        (
            [Id] => 1
            [ProductCode] => 4356
            [TotalStock] => 40
        )

)

标签: php

解决方案


我认为您只需要覆盖特定 productId 的子数组(内部数组)即可获得最新信息。我们可以使用ProductCodeas 键来过滤掉重复项:

$csv_mod = array(); // initializing variable to store latest values
foreach ($csv as $obj) {
    if ( isset($csv_mod[$obj['ProductCode']]) 
         && $csv_mod[$obj['ProductCode']]['TotalStock'] < $obj['TotalStock'] ) {

        // This will overwrite if a duplicate value with higher stock appears
        $csv_mod[$obj['ProductCode']] = $obj;
    } else {
        // First time encountered in the loop
        $csv_mod[$obj['ProductCode']] = $obj;
    }
}

推荐阅读