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.
Kannst du nicht einfach '$ collection-> push()'? – PawelMysior
nicht genau, push() erstellt keinen neuen Index für jeden Eingang. – Skeletor
Nun, was ist mit $ $ collection-> put ($ key, $ value) '? – PawelMysior