2016-08-24 42 views
0

有沒有方法可以對集合上的更深索引進行更改或合併,而無需先將集合轉換爲數組?Laravel 5.2推送到Collection中更深的索引數組中

我有一個$收集有4項指標全部包含$陣列所以爲了推到陣列我必須這樣做:

$collection = $collection->toArray(); // without this get array_push parameter 1 should be an array object given error 
array_push($collection[$index], $array); 

但是,我希望有一個更好的辦法,所以我沒有必要重新收集原始$集合,然後繼續前進,如下所示,這一點我知道是行不通的,但是形成了一個比上面更尷尬的例子:

$collection->get($index)->merge($array); 

回答

0

我把臨時使用上述array_push與現有的陣列的方向並沒有合併的解決方案,但這樣做的工作,看起來更優雅一點。感謝Marcin Nabialek指出Collections實現了ArrayAccess接口,它沒有解決array_push的使用問題,但是在下面的答案中用它來覆蓋存在的數組。

$collection[$index] = collect($collection->get($key))->merge($array); 

我接受任何改進以推動我使用集合。

1

由於集合實現了ArrayAccess接口,而不是:

$collection = $collection->toArray(); 
array_push($collection[$index], $array); 

你可以使用:

array_push($collection[$index], $array); 

編輯

好吧,代碼將無法工作,因爲你,你不能指定超載性質的錯誤,但你也提到其他錯誤在評論中。

假設你有收集這樣的:

$collection = collect([[1,2],[11,12],[21,22],[31,32]]); 

,並要附加到13[11,12]

你可以這樣說:

$collection->put(1, array_merge($collection[1], [13])); 
+0

由於這是它

,我沒有很容易知道:)我有一些錯誤,最初提到$ collection是一個ob ject,所以我只是假設我不能像數組訪問它 – mtpultz

+0

它看起來像我仍然得到這個錯誤,當我嘗試使用array_push'[2016-08-24 16:40:03] local.ERROR:ErrorException: array_push()需要參數1是數組,對象在/home/vagrant/project/app/Http/Controllers/EventController.php:282 中給出。堆棧跟蹤: #0 [內部函數]:Illuminate \ Foundation \ Bootstrap \ HandleExceptions - > handleError(2,'array_push()ex ...','/ home/vagrant/s ...',282,Array) #1 /home/vagrant/project/app/Http/Controllers/EventController.php(282):array_push(Object(Illuminate \ Database \ Eloquent \ Collection),Object(Illuminate \ Database \ Eloquent \ Collection))' – mtpultz

+0

@mtpultz請看我編輯 –

0

它使用​​

$collection->put($index, $array);

如果你想推到收集使用結束push

$collection->push($array);