2016-09-07 1 views
0

Lasst uns sagen, ich habe diese Sammlung:

$collection = collect(['cars'=>[ 
[['id'=>'1'], ['brand'=>'ford'],['color'=>'green']], 
[['id'=>'2'], ['brand'=>'audi'],['color'=>'yellow']], 
[['id'=>'3'], ['brand'=>'bmw'],['color'=>'grey']], 
[['id'=>'4'], ['brand'=>'honda'],['color'=>'black']] 
]]); 

diese Sammlung in einer rekursiven func verwendet wird. In jedem Zyklus wan't ich so etwas wie dies auszuführen: könnte

$collection->vehicles[] = $brand; 

das Ergebnis sein:

'cars'=>[ 
[['id'=>'1'], ['brand'=>'ford'],['color'=>'green']], 
[['id'=>'2'], ['brand'=>'audi'],['color'=>'yellow']], 
[['id'=>'3'], ['brand'=>'bmw'],['color'=>'grey']], 
[['id'=>'4'], ['brand'=>'honda'],['color'=>'black']], 
'vehicles'=>['0'=>'ford', '1'=>'audi', '2'=>'bmw', '3'=>'honda']] 

Dies ist tatsächlich ein Beispiel. Was ich hier suche, ist das Äquivalent von $arr[] = $var. Jedes Mal, wenn ich einen Wert hinzufüge, wird dieser automatisch hinzugefügt und indiziert. Es gibt andere Dinge wie Append, Push und Put, aber ich konnte nicht das Äquivalent dazu finden. Gibt es eine Entsprechung oder Alternative?

----------- Herausgegeben für mehr Einzelheiten zu nennen ---------------

Ich würde es einfach zu halten, aber ich glaube, ich brauche um mehr Details zu geben. Ich habe eine rekursive Funktion, die eine hierarchische Sammlung von Kategorien erstellt. Beim Erstellen dieser Sammlung möchte ich eine zusätzliche Eigenschaft erstellen, die alle Elemente in einem (eindimensionalen, flachen) Array enthält. Also kann ich es später verwenden (wie $ collection-> flat) und muss nicht die ganze Sammlung loopen, um es zu reduzieren.

public static function toHierarchic($items, $parent_id=0, $newItems=null){ 
    if($newItems===null){ // create a collection for the begining 
     $newItems = collect($items->whereLoose('parent_id', $parent_id)); 
    } 
    foreach ($newItems as $itemKey => $newItem) { 
     $newItem->flat[] = [$newItem-id=>$newItem->title]; 

     $newItem->children = $children; 
     self::toHierarchicObject($items, $newItem->id, $newItem->children); 
    } 
    return $newItems; 
} 

alles funktioniert hier gut, außer $newItem->flat[] = [$newItem-id=>$newItem->title]; dies der Teil ist, ich die Frage gestellt. In jedem Cyle oder der Rekursion möchte ich den aktuellen Namen/die aktuelle ID zu $ ​​collection-> flat hinzufügen.

+0

Kannst du nicht einfach '$ collection-> push()'? – PawelMysior

+0

nicht genau, push() erstellt keinen neuen Index für jeden Eingang. – Skeletor

+0

Nun, was ist mit $ $ collection-> put ($ key, $ value) '? – PawelMysior

Antwort

1

Ist dies Ihre Sammlung von Autos:

$collection = collect([ 
    ['brand' => 'ford', 'color' => 'green'], 
    ['brand' => 'audi', 'color' => 'yellow'], 
    ['brand' => 'bmw', 'color' => 'grey'], 
    ['brand' => 'honda', 'color' => 'black'] 
]); 

Sie die Marken durch wie die Liste kann:

$brands = $collection->pluck('brand'); 

Sagen Sie ein Auto hinzufügen möchten:

$collection->push(['brand' => 'audi', 'color' => 'black']); 

Wenn Sie mehrere Autos mit der gleichen Marke in Ihrer Sammlung haben und nur eine Liste von Marken ohne Duplikate anzeigen möchten, dann tun Sie dies t wie folgt:

$uniqueBrands = $collection->unique('brand')->pluck('brand'); 
+0

Die Sammlung ist tatsächlich verschachtelt, weshalb ich das nicht verwenden kann. – Skeletor

+0

Ich sage nur, vielleicht müssen Sie Ihre Sammlung ändern. Wenn das natürlich möglich ist. – PawelMysior

Verwandte Themen