Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php数组\从数组数组中取消设置键值的筛选器_Php_Laravel 5 - Fatal编程技术网

Php数组\从数组数组中取消设置键值的筛选器

Php数组\从数组数组中取消设置键值的筛选器,php,laravel-5,Php,Laravel 5,我想从嵌套数组中取消设置数组元素 我想执行递归数组过滤器,但我不确定如何有效地执行 下面是原始数组 [ [a] => 3 [b] => 0 [c] => [ [ [1] => aa [2] => 1 [3] => [ [ [a1] => 6 [a2] => 5781

我想从嵌套数组中取消设置数组元素

我想执行递归数组过滤器,但我不确定如何有效地执行

下面是原始数组

[
  [a] => 3
  [b] => 0
  [c] => [
    [
      [1] => aa
      [2] => 1
      [3] => [
                [
                  [a1] => 6
                  [a2] => 5781
                  [a3] =>
                      [
                        [1] => 0
                        [2] => 19550
                        [3] => 5781
                      ]
                ]
                [
                  [a1] => 1
                  [a2] => 5781
                  [a3] =>[
                          [1] => 0
                          [2] => 19550
                          [3] => 5781
                      ]
                ]
              ]
    ]
    [
      [1] => aa
      [2] => 1
      [3] => [
                [
                  [a1] => 6
                  [a2] => 5781
                  [a3] =>
                      [
                        [1] => 0
                        [2] => 19550
                        [3] => 5781
                      ]
                ]
                [
                  [a1] => 1
                  [a2] => 5781
                  [a3] =>[
                          [1] => 0
                          [2] => 19550
                          [3] => 5781
                      ]
                ]
              ]
    ]
  ]
]
期望数组

[
  [a] => 3
  [c] => [
    [
      [1] => aa
      [3] => [
                [
                  [a1] => 6
                  [a3] =>
                      [
                        [2] => 19550
                        [3] => 5781
                      ]
                ]
                [
                  [a1] => 1
                  [a3] =>[
                          [2] => 19550
                          [3] => 5781
                      ]
                ]
              ]
    ]
    [
      [1] => aa
      [3] => [
                [
                  [a1] => 6
                  [a3] =>
                      [
                        [2] => 19550
                        [3] => 5781
                      ]
                ]
                [
                  [a1] => 1
                  [a3] =>[
                          [2] => 19550
                          [3] => 5781
                      ]
                ]
              ]
    ]
  ]
]
正如您在每个嵌套数组的预期数组中看到的,一些键值对已被删除。 我需要根据键名筛选数组。 这就是我的密钥名是固定的,需要从数组中的每个子数组中删除


任何帮助都将不胜感激。

这里是一个基于递归foreach的解决方案的示例,用于处理您提供的数据集上的代码

    $sourceArray = array("a" => 3, "b" => 0, "c" => array("1" => "aa", "2" => 1, "3" => array("a1" => 6, "a2" => 5781, "a3" => array("1" => 0, "2" => 19550, "3" => 5781)), array( "a1" => 1, "a2" => 5781, "a3" =>array("1" => 0, "2" => 19550, "3" => 5781 ))), array( "1" => "aa", "2" => 1, "3" => array( array( "a1" => 6, "a2" => 5781, "a3" => array( "1" => 0, "2" => 19550,"3" => 5781))), array( "a1" => 1, "a2" => 5781, "a3" =>array(  "1" => 0, "2" => 19550, "3" => 5781))));

    print_r($sourceArray,1);

    function removeKeys($keys, $sourceData) {

        foreach ($sourceData as $key=>$val) {

            if (in_array($key, $keys, true)) {
                unset($sourceData[$key]);
            } else if (is_array($val)) {
                $sourceData[$key] = removeKeys($keys, $sourceData[$key]);
            }
        }
        return $sourceData;
    }

    $keysToRemove = array("b","2","a2");

    $newArray = removeKeys($keysToRemove, $sourceArray);

    print_r($newArray);
实现起来很简单,但获取数据有点困难。在这个例子中,我确实注意到了一个bug,即如果密钥在原始数组中为0,那么即使它不在$keys数组中,它仍然会被删除

但我假设这个例子足以回答您的问题,并且我所陈述的边缘情况不会发生,即0不是数组中的键值。如果您确实使用0作为键,您可以添加额外的逻辑来捕获该情况,但这会使函数的速度减慢一点,因此我将让您自己选择


注意,上面提到的错误现在已经修复了,并且在代码中。。。有关原始海报的解决方案,请参见下面的注释,你为什么不想使用foreach?已经检查了该链接,但我不清楚,因为我需要它覆盖数组中的数组,也需要覆盖最里面的数组。@Script47那么我应该使用嵌套foreach的???还是递归函数?你的ans帮了大忙。只是更新了关于你已经告诉过的错误,in_数组函数甚至匹配0虽然它不存在。所以可以通过在严格模式下使用in_array来修复此问题,如in_array$key,$keys,true。希望它能帮助别人。很好!对严格参数有很好的理解。很高兴我能帮忙!