【问题标题】:Delete an array element based on value from nested array根据嵌套数组中的值删除数组元素
【发布时间】:2016-04-28 02:56:16
【问题描述】:

我尝试使用 PHP unset(key) 函数根据其中嵌套数组的值删除整个父数组。

嵌套数组的样子

Array ( 
[0] => Array ( 
    [ID] => 9909 
    [SHIPPING_AMOUNT] => 5 
    [TOTAL_TAX] => 0 
    [GRAND_AMOUNT] => 49.97 
    [ITEMS_AMOUNT] => 44.97 
    [ITEMS] => Array ( 
        [0] => Array ( 
            [CODE] => TEST
            [QTY] => 1 
            [UNIT_PRICE] => 14.99 ) 
        [1] => Array ( 
            [CODE] => NNKIT 
            [QTY] => 1 
            [UNIT_PRICE] => 9.99 ) 
        [2] => Array ( 
            [CODE] => MAINKIT 
            [QTY] => 1 
            [UNIT_PRICE] => 19.99 )
        ) 
    ) 
[1] => Array ( 
    [ID] => 9910 
    [SHIPPING_AMOUNT] => 5 
    [TOTAL_TAX] => 0 
    [GRAND_AMOUNT] => 74.96 
    [ITEMS_AMOUNT] => 69.96 
    [ITEMS] => Array ( 
        [0] => Array ( 
            [CODE] => NNKIT 
            [QTY] => 1 
            [UNIT_PRICE] => 9.99 ) 
        [1] => Array ( 
            [CODE] => MAINKIT 
            [QTY] => 3 
            [UNIT_PRICE] => 19.99 ) 
        ) 
    ) 
[2] => Array ( 
    [ID] => 9911 
    [SHIPPING_AMOUNT] => 5 
    [TOTAL_TAX] => 0 
    [GRAND_AMOUNT] => 44.98 
    [ITEMS_AMOUNT] => 39.98 
    [ITEMS] => Array ( 
        [0] => Array ( 
            [CODE] => MAINKIT 
            [QTY] => 2 
            [UNIT_PRICE] => 19.99 ) 
        ) 
    ) 
[3] => Array ( 
    [ID] => 9912 
    [SHIPPING_AMOUNT] => 5 
    [TOTAL_TAX] => 0 
    [GRAND_AMOUNT] => 29.98 
    [ITEMS_AMOUNT] => 24.98 
    [ITEMS] => Array ( 
        [0] => Array ( 
            [CODE] => TEST
            [QTY] => 1 
            [UNIT_PRICE] => 14.99 ) 
        [1] => Array ( 
            [CODE] => NEWTEST
            [QTY] => 1 
            [UNIT_PRICE] => 9.99 )
        )
    ) 

我检查的值是CODE = MAINKIT。如果嵌套数组中不存在,则应删除主数组(在本例中为父数组array[3]),但以某种方式返回的key 来自嵌套数组而不是父数组。

PHP 代码:

foreach($array as $key => $value){
    if(is_array($value) && $value['CODE'] != 'MAINKIT')
          unset($key);
}

【问题讨论】:

    标签: php arrays multidimensional-array array-unset


    【解决方案1】:

    CODE 元素在$value['ITEMS'] 数组中,而不是直接在$value 中。

    要判断MAINKIT 是否不在任何项目中,您必须遍历所有项目,测试它们是否匹配。如果没有,则删除数组元素。

    试试:

    foreach($array as $key => $value){
        if (is_array($value) && is_array($value['ITEMS']))
            $found_mainkit = false;
            foreach ($value['ITEMS'] as $item) {
                if($item['CODE'] == 'MAINKIT') {
                    $found_mainkit = true;
                    break;
                }
            }
            if (!$found_mainkit) {
                unset($array[$key]);
            }
        }
    }
    

    【讨论】:

    • 看起来和我的类似,只是更进一步 - 删除嵌套的 ITEMS 数组而不是整个父数组
    • 删除的是$array[$key],而不是$item
    • 我看到了问题,请稍等。
    猜你喜欢
    • 2017-03-28
    • 2013-11-22
    • 2022-07-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 2019-01-25
    • 1970-01-01
    相关资源
    最近更新 更多