April 22, 2018 —John Koster
The slice
method is used to return a slice, or portion of the collection starting at the given $offset
. The $offset
tells the slice
method where to begin when creating the new collection. For example, if the $offset
is 3
, the new collection will begin with the third item in the original collection (the collection the slice
method was invoked on). If the $offset
is negative, the new collection will start that distance from the end of the original collection. The slice
method returns a new Collection
instance and will not modify the original Collection
instance.
The slice
method is similar in behavior to PHP's array_slice
function.
1public function slice(2 $offset,3 $length = null4);
The following code example demonstrates the usage of the slice
method using a simple collection:
1use Illuminate\Support\Collection;2 3// Create a new collection instance.4$collection = new Collection([1, 2, 3, 4, 5 , 6, 7, 8]);5 6// Slice the collection starting at the third item.7// The returned collection will contain items8// 4, 5, ,7 and 8.9$sliced = $collection->slice(3);
After the above code has executed the $sliced
variable will be an instance of Collection
and contain a value similar to the following output:
1object(Illuminate\Support\Collection)2 protected 'items' =>3 array4 0 => int 45 1 => int 56 2 => int 67 3 => int 78 4 => int 8
The same result can be accomplished using a negative $offset
like so:
1// Slice the collection starting starting at the2// fifth item from the end of the collection. The3// returned collection will contain the items4// 4, 5, 6, 7 and 8.5$sliced = $collection->slice(-5);
After the above code has executed, like before, the $sliced
variable would be an instance of Collection
and would contain a value similar to the following output:
1object(Illuminate\Support\Collection)2 protected 'items' =>3 array4 0 => int 45 1 => int 56 2 => int 67 3 => int 78 4 => int 8
The $length
parameter allows developers to control the size of the returned Collection
. If the provided $length
is positive, the returned collection will have up that many items. The total number of items can be less than the supplied $length
if the original collection does not have enough items to satisfy the $length
. If the $length
is negative, the returned collection will stop that many items from the end of the original collection. The following example shows the various uses of the $length
parameter using the $collection
instance created earlier:
1// The returned collection will contain the items 2// 2, 3 and 4. 3$sliced = $collection->slice(1, 3); 4 5// The returned collection will contain the items 6// 1, 2 and 3. 7$sliced = $collection->slice(0, 3); 8 9// The returned collection will contain the items10// 1, 2, 3, 4 and 5.11$sliced = $collection->slice(0, -3);
By default, the slice
method will reorder and reset the keys of the returned collection's items. This can be changed by passing true
as the argument for the $preserveKeys
parameter. The following code samples show the affect of the $preserveKeys
parameter:
1// Slice the collection without preserving keys.2$sliced = $collection->slice(2, 3);3 4// Slice the collection while preserving keys.5$preservedKeySlice = $collection->slice(2, 3, true);
After the above code has executed, the $sliced
variable will be an instance of Collection
and contain a value similar to the following output:
1object(Illuminate\Support\Collection)2 protected 'items' =>3 array4 0 => int 35 1 => int 46 2 => int 5
Notice that the keys of the collection are 0
, 1
and 2
. The following output is for the $preservedKeySlice
variable (which is also an instance of Collection
). Notice how the keys are 2
, 3
and 4
, because they were preserved:
1object(Illuminate\Support\Collection)2 protected 'items' =>3 array4 2 => int 35 3 => int 46 4 => int 5
∎
The following amazing people help support this site and my open source projects ♥️
If you're interesting in supporting my work and want to show up on this list, check out my GitHub Sponsors Profile.