2016-09-09 1 views
0

I dieses mehrdimensionales Array habe:array_filter() filtert nur den Wurzelknoten

[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 () 
    ) 

I die erste Ebene Knoten des Arrays filtern kann dies unter Verwendung von:

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

so erhalte ich diese:

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 

Aber wenn ich versuche, die zweite oder dritte Ebene Knoten mit diesem Beispiel zu filtern:

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

Ich bekomme leere Ergebnisse .. Also, wie kann ich in diesem Array die zweite oder dritte filtern?

+0

'array_filter' nicht rekursiv ist. Wenn Sie eine rekursive Filterung benötigen, müssen Sie sie selbst implementieren. – deceze

+1

Und was genau ist das erwartete Ergebnis? Du willst alle Knoten behalten, die Kinder haben, die deinem Zustand entsprechen, nehme ich an ...? – deceze

Antwort

-1

Möglicherweise hilft dies und hängt mit Ihrem Problem zusammen. Wie ich verstanden habe, ist es die Rekursion, die für dich fehlt, richtig? https://stackoverflow.com/a/6795671/2660253

+0

Warum wird dies abgelehnt? –

1

Wenn Sie den Wert enthält vollständige Palette zurückkehren möchten, können Sie die folgende verwenden:

$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

Was ist Filter Kinder von Kindern ...? – deceze

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

Bitte geben Sie immer eine Erklärung und nicht nur den einfachen Code – andreas

Verwandte Themen