通过键在多维数组中

时间:2018-06-28 13:26:00

标签: php arrays

说,我有一个具有以下结构的数组:

Array
(
    [0] => Array
        (
            [0] => data
            [1] => data
            [2] => data
            [3] => Array
                (
                    [0] => data
                    [thatbastard] => Array
                        (
                            [0] => Array
                                (
                                    [0] => data
                                    [1] => data
                                    [2] => data
                                    [3] => data
                                )

                            [1] => Array
                                (
                                    [0] => data
                                    [1] => data
                                    [2] => data
                                    [3] => data
                                )

                            [2] => Array
                                (
                                    [0] => data
                                    [1] => data
                                    [2] => data
                                    [3] => data
                                )
                        )

                    [2] => data
                )

            [4] => Array
                (
                    [0] => data
                    [thatbastard] => Array
                        (
                            [0] => Array
                                (
                                    [0] => data
                                    [1] => data
                                    [2] => data
                                    [3] => data
                                )

                            [1] => Array
                                (
                                    [0] => data
                                    [1] => data
                                    [2] => data
                                    [3] => data
                                )

                            [2] => Array
                                (
                                    [0] => data
                                    [1] => data
                                    [2] => data
                                    [3] => data
                                )
                        )

                    [2] => data
                )
        )

    [1] => Array(similar to [0])
)

我想在整个数组上删除[thatbastard],所以我的数组将如下所示:

Array
(
    [0] => Array
        (
            [0] => data
            [1] => data
            [2] => data
            [3] => Array
                (
                    [0] => data
                    [2] => data
                )

            [4] => Array
                (
                    [0] => data
                    [2] => data
                )
        )

    [1] => Array(similar to [0])
)

我已经广泛搜索了提示,但是大多数都使用key_by_value搜索。就我而言,我不在乎价值,我想通过特定的键摆脱数据。

我尝试了基于this topic并具有递归功能的解决方案:

 public function filterList($arr, $remove_key)
    {
        foreach ($arr as $key => $value)
        {
            if (is_array($value)) {
                $filtered[$key] = $this->filterList($value, $remove_key);
            }
            else
            {
                if ($key != $remove_key)
                {
                    $filtered[$key] = $value;
                }
            }
        }
        return $filtered;
    }

但是它提供与原始数组相同的输出。
我已经尝试过this solution,但是显然我的数组的深度级别太多,无法弄清楚如何改善代码。
问题是我想编写一些可以与不同数组一起使用的多任务功能,而不仅仅是示例。

2 个答案:

答案 0 :(得分:2)

您可以使用PHP array_filter documentation中的array_filter_recursive函数。这将适用于任何多维数组。

<?php


$sweet = array('a' => 'Apple', 'b' => 'Banana');
$fruits = array('sweet' => $sweet, 'sour' => 'Lemon');

function array_filter_recursive($input, $callback = null) 
{ 
  foreach ($input as &$value) 
  { 
    if (is_array($value)) 
    { 
      $value = array_filter_recursive($value, $callback); 
    } 
  }
  return array_filter($input, $callback, ARRAY_FILTER_USE_BOTH); 
} 


$result = array_filter_recursive($fruits, function ($value, $key) {
  return ($key != 'b');
});

var_dump($result);

答案 1 :(得分:1)

这是一种方法。 可能不是最好的方法,但是它将为您提供所需的结果。

foreach($array1 as $key1 => $array2) {

    foreach($array2 as $key2 => $array3) {

        foreach($array3 as $key3 => $data) {

            if($key3 == 'thatbastard') unset($array1[$key1][$key2][$key3]);

        }

    }

}

值得注意的是,这依赖于数组的第三层,这是唯一具有该名称的键的层。如果密钥可以在多个级别,那么您将需要调整此代码以在这些不同级别上运行unset命令。

要使此功能适合您,只需将$ array1更改为数组的名称,并保留所有其他变量不变。