2016-07-30 13 views
0

I Sammlungen in der Sammlung haben, die so aussehen:Arbeiten an Laravel verschachtelte Sammlungen

=> [ 
[ 
"id" => 3, 
    "parent_id" => 2, 
    "depth" => 1, 
    "children" => [ 
    [ 
     "id" => 4, 
     "parent_id" => 3, 
     "depth" => 2, 
     "children" => [ 
     [ 
      "id" => 5, 
      "parent_id" => 4, 
      "depth" => 3, 
      "children" => [ 
      [ 
    [...] 

Wie kann ich daran arbeiten? $ result-> count();

diese Rückkehr 1

Es verhält sich wie es nur 1 Sammlung ist, so kann ich nicht einmal Karte verwenden oder jeder zu filtern. Ich muss mit einer maximalen Tiefe von 4 filtern.

Ich versuchte ablehnen(), aber es funktioniert auch nicht.

ich es Array umwandeln könnte, aber ich möchte die schöne Sammlung Methoden verwenden ...

Antwort

1

Sie müssen durch Ihre Sammlung Artikel iterieren

$result->children->map(function ($item) { 
    // do some stuff with $item or you can no map through its children 
    $item->children->map(function ($nestedItem) { 
     // do some stuff with $nestedItem etc// 
    }); 
}); 

eine Alternative wäre, obwohl foreach Anweisung zu verwenden

+0

Das gibt mir zurück: Null – TheShun

+0

poste hier deinen Code, nicht nur den Dump der Variablen –

+0

Ich benutze diese https://github.com/franzose/ClosureTable auf meinem Benutzermodell. Um diesen Dump zu bekommen, mache ich nur: $ result = $ user-> getDescendantsTree(); Ich kann hier nicht alle Klassen der Schließungstabelle posten, aber das Ergebnis ist eine verschachtelte Sammlung. – TheShun

0

zuerst die Sammlung Array umwandeln und verwenden Sie dann

count($result, COUNT_RECURSIVE)