首页 > 解决方案 > 从三重嵌套数组PHP中删除元素

问题描述

我正在努力弄清楚如何根据最深层次的值从三重嵌套数组中删除元素。我想删除 time == "NA" 的任何位置子数组。我的数组结构如下。

Array
(
    [0] => Array
        (
            [Id] => 151601
            [First_Name] => JOHN
            [Last_Name] => DOE
            [Location_Id] => 10
            [Positions] => Array
                (
                    [North] => Array
                        (
                            [Current_Level] => 4
                            [Last_Date] => 11/7/2001
                            [Time] => 4:15 AM
                        )

                    [East] => Array
                        (
                            [Current_Level] => 4
                            [Last_Date] => 7/10/2003
                            [Time] => 7:30 PM
                        )

                    [South] => Array
                        (
                            [Current_Level] => 2
                            [Last_Date] => 8/10/2007
                            [Time] => NA
                        )

                    [West] => Array
                        (
                            [Current_Level] => NA
                            [Last_Date] => NA
                            [Time] => NA
                        )

                )

        )

所以我的最终结果是

Array
    (
        [0] => Array
            (
                [Id] => 151601
                [First_Name] => JOHN
                [Last_Name] => DOE
                [Location_Id] => 10
                [Positions] => Array
                    (
                        [North] => Array
                            (
                                [Current_Level] => 4
                                [Last_Date] => 11/7/2001
                                [Time] => 4:15 AM
                            )
    
                        [East] => Array
                            (
                                [Current_Level] => 4
                                [Last_Date] => 7/10/2003
                                [Time] => 7:30 PM
                            )
    
                    )
    
            )

这是我目前正在尝试的,但它引发了非法偏移类型错误。我想我只是没有取消正确的事情。我可以让它回显所有正确的子数组,但是当我尝试取消设置时,我得到一个偏移错误。

foreach($records as $record) {
    foreach ($record as $value) {
      if (is_array($value)) {
        foreach ($value as $position) {
          if($position["Time"] == "NA") {
            unset($records[$record][$value]);
          }
        }
      }
    }
  }

标签: phparraysfor-loopmultidimensional-array

解决方案


通过引用和过滤函数传递数组元素,您可以将代码简化为:

foreach($records as &$record) {
    $record['Positions'] = array_filter(
        $record['Positions'], 
        function ($v) {
            return $v['Time'] !== 'NA';
        }
    );
}

在这里拉小提琴。


推荐阅读