2016-09-07 5 views
0

だが、私はこのコレクションを持っているとしましょう:

$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']] 
]]); 

このコレクションは、再帰FUNCに使用されています。すべてのサイクルでは、私はこのような何かを実行するためにwan't:

$collection->vehicles[] = $brand; 

結果は次のようになります。

'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']] 

これは実際には一例です。私がここで探しているのは$arr[] = $varと同じです。したがって、値を追加するたびに自動的に値が追加され、インデックスが作成されます。 append、push、putのようなものがありますが、これに相当するものは見つかりませんでした。同等か選択肢がありますか?

-----------私はそれをシンプルに保つために

---------------詳細を提供するためだろう編集が、私は、私は必要だと思います詳細を述べる。私は、カテゴリの階層的なコレクションを作成する再帰的な関数を持っています。このコレクションを作成する際には、(1次元のフラットな)配列内のすべてのアイテムを保持する追加のプロパティを作成したいと考えています。だから私は後で使用することができます($ collection-> flatのように)、コレクション全体をループしてフラット化する必要はありません。

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; 
} 

$newItem->flat[] = [$newItem-id=>$newItem->title];以外はすべて正常に動作します。これは私が質問した部分です。各cyleまたはrecursionで、$ collection-> flatプロパティに現在の名前/ IDを追加したいとします。

+0

'$ collection-> push()'を使うことはできませんか? – PawelMysior

+0

正確ではないが、push()は各入力に新しいインデックスを作成しません。 – Skeletor

+0

'$ collection-> put($ key、$ value)'はどうですか? – PawelMysior

答えて

1

これは車のあなたのコレクションの場合:

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

あなたはそのようなことでブランドを一覧表示することができます。

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

は、あなたが車を追加したいと言う:

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

あなたのコレクションに同じブランドの複数の車があり、重複しないでブランドのリストを表示したい場合は、次のようにしてください:

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

コレクションは実際にネストされているので、私はそれを使うことができません。 – Skeletor

+0

私はちょうどあなたのコレクションを変更する必要があるかもしれないと言っています。それがもちろん可能ならば。 – PawelMysior

関連する問題