2016-09-09 4 views
0

をフィルタリング:array_filter()私は、この多次元アレイ有しルートノードを

:私はこれを取得

$foobar = array_filter($navbar, function($value) { 
      return $value['slug'] == 'accesorios' || $value['slug'] == 'ropa';   
    }); 

:私はこれを使用して、配列の最初のレベルのノードをフィルタリングすることができ

[0] => Array (
    [id] => 1 
    [name] => Ropa 
    [slug] => ropa 
    [lft] => 1 
    [lvl] => 0 
    [rgt] => 2 
    [__children] =>  Array () 
    ) 
[1] => Array (
    [id] => 3 
    [name] => Calzado 
    [slug] => calzado 
    [lft] => 1 
    [lvl] => 0 
    [rgt] => 8 
    [__children] => Array (
     [0] => Array (
      [id] => 10 
      [name] => Zapatos y botas 
      [slug] => zapatos-y-botas 
      [lft] => 2 
      [lvl] => 1 
      [rgt] => 3 
      [__children] =>  Array () 
      ) 
     [1] => Array (
      [id] => 11 
      [name] => Zapatillas 
      [slug] => zapatillas 
      [lft] => 4 
      [lvl] => 1 
      [rgt] => 7 
      [__children] => Array (
       [0] => Array (
        [id] => 14 
        [name] => Zapatillas rojas 
        [slug] => zapatillas-rojas 
        [lft] => 5 
        [lvl] => 2 
        [rgt] => 6 
        [__children] =>  Array () 
        ) 
       ) 
      ) 
     ) 
    ) 
[2] => Array (
    [id] => 13 
    [name] => Accesorios 
    [slug] => accesorios 
    [lft] => 1 
    [lvl] => 0 
    [rgt] => 2 
    [__children] =>  Array () 
    ) 

array (size=2) 
    0 => 
    array (size=7) 
     'id' => int 1 
     'name' => string 'Ropa' (length=4) 
     'slug' => string 'ropa' (length=4) 
     'lft' => int 1 
     'lvl' => int 0 
     'rgt' => int 2 
     '__children' => 
     array (size=0) 
      empty 
    2 => 
    array (size=7) 
     'id' => int 13 
     'name' => string 'Accesorios' (length=10) 
     'slug' => string 'accesorios' (length=10) 
     'lft' => int 1 
     'lvl' => int 0 
     'rgt' => int 2 
     '__children' => 
     array (size=0) 
      empty 

しかし、私は、例えば、これを使用して第2または第3のレベルのノードをフィルタリングしよう:

$foobar = array_filter($navbar, function($value) { 
      return $value['slug'] == 'zapatillas';   
    }); 

空の結果が得られました。どのようにして、その配列を2番目または3番目にフィルタリングできますか?

+0

'array_filter'は再帰的ではありません。再帰的フィルタリングが必要な場合は、それを自分で実装する必要があります。 – deceze

+1

期待される結果はどういうものでしょうか?あなたはあなたの状態に合った子供を持つすべてのノードを保持したいと思います...? – deceze

答えて

-1

あなたの問題に関連している可能性があります。私が理解したように、それはあなたのために欠けている再帰です。 https://stackoverflow.com/a/6795671/2660253

+0

これはなぜ控除ですか? –

1

あなたが値を含む完全な配列を返すようにしたい場合は、以下を使用することがあります。

$foobar = array_filter($navbar, function($value) { 
    //return true if child slug key contains zapatillas as a value 
    return in_array('zapatillas', array_column($value['__children'], 'slug')); 
}); 
+0

子供の子供のフィルタリングはどうですか? – deceze

-2
$foobar = array_filter($navbar, function($value) { foreach($value as $val) { 
return $val['slug'] == 'zapatillas'; } 
}); 
+0

平易なコードだけでなく、何か説明をしてください – andreas

関連する問題