PHP树阵列删除水平

问题描述:

我有一个像以下“树”阵列。这是一个导航。现在我想删除所有级别> = 3.所以我只想得到一个与前两个级别的数组。有没有办法像这样修剪/缩短阵列。PHP树阵列删除水平

你有什么我可以找的提示吗?

Array 
(
    [0] => Array 
     (
      [name] => Home 
      [level] => 1 
      [sub] => 
     ) 

    [1] => Array 
     (
      [name] => Products 
      [level] => 1 
      [sub] => Array 
       (
        [56] => Array 
         (
          [name] => Product 1 
          [level] => 2 
          [sub] => Array 
           (
            [61] => Array 
             (
              [name] => Product 1b 
              [target] => 
              [level] => 3 
              [sub] => 
             ) 

           ) 

         ) 

        [57] => Array 
         (
          [name] => Product 2 
          [level] => 2 
          [sub] => 
         ) 

       ) 

     ) 

    [2] => Array 
     (
      [name] => Contact 
      [level] => 1 
      [sub] => 
     ) 

    [3] => Array 
     (
      [name] => Something Else 
      [level] => 1 
      [sub] => 
     ) 

) 

$data = [ 
    0 => ['name' => 'Home', 'level' => 1, 'sub' => []], 
    1 => [ 
     'name' => 'Products', 
     'level' => 2, 
     'sub' => [ 
      '56' => [ 
       'name' => 'Product 1', 
       'level' => 2, 
       'sub' => [ 
        '61' => [ 'name' => 'Product 1b', 'target' => '', 'level' => 3, 'sub' => ''], 
       ], 
      ], 
      '57' => ['name' => 'Product 2', 'level' => 2, 'sub' => ''] 
     ] 
    ], 
    2 => ['name' => 'Contact', 'level' => 1, 'sub' => []], 
    3 => ['name' => 'Something Else', 'level' => 1, 'sub' => []] 
]; 

function processArray(&$arr) { 
    foreach ($arr as $key => $array) { 
     if ($array['level'] >= 3) { 
      unset($arr[$key]); 
     } 
     if (!empty($arr[$key]['sub'])) { 
      processArray($arr[$key]['sub']); 
     } 
    } 
} 

processArray($data); 
+0

完美!非常感谢!我认为参考文献(&$ arr)是缺失的一点。我以同样的方式遍历数组并试图取消设置数组。但没有参考它没有工作。非常感谢! – user3343737