rfc:spread_operator_for_array
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
rfc:spread_operator_for_array [2019/04/04 13:56] – jhdxr | rfc:spread_operator_for_array [2019/04/05 14:10] – more example jhdxr | ||
---|---|---|---|
Line 22: | Line 22: | ||
Spread operator works for both array syntax('' | Spread operator works for both array syntax('' | ||
+ | |||
+ | It's also possible to unpack array returned by a function immediately. | ||
+ | |||
<code php> | <code php> | ||
$arr1 = [1, 2, 3]; | $arr1 = [1, 2, 3]; | ||
Line 27: | Line 30: | ||
$arr3 = [0, ...$arr1]; //[0, 1, 2, 3] | $arr3 = [0, ...$arr1]; //[0, 1, 2, 3] | ||
$arr4 = array(...$arr1, | $arr4 = array(...$arr1, | ||
+ | $arr5 = [...$arr1, ...$arr1]; //[1, 2, 3, 1, 2, 3] | ||
+ | |||
+ | function getArr() { | ||
+ | return [' | ||
+ | } | ||
+ | $arr6 = [...getArr(), | ||
+ | |||
+ | $arr7 = [...new ArrayIterator([' | ||
+ | |||
+ | function arrGen() { | ||
+ | for($i = 11; $i < 15; $i++) { | ||
+ | yield $i; | ||
+ | } | ||
+ | } | ||
+ | $arr8 = [...arrGen()]; | ||
</ | </ | ||
+ | |||
==== String keys ==== | ==== String keys ==== | ||
- | In order to make the behavior consistent with [[rfc: | + | In order to make the behavior consistent with [[rfc: |
==== By-reference passing ==== | ==== By-reference passing ==== | ||
Line 37: | Line 56: | ||
<code php> | <code php> | ||
$arr1 = [1, 2, 3]; | $arr1 = [1, 2, 3]; | ||
- | $arr2 = [...& | + | $arr2 = [...& |
</ | </ | ||
Line 66: | Line 85: | ||
==== Advantages over array_merge ==== | ==== Advantages over array_merge ==== | ||
- Spread operator should have a better performance than '' | - Spread operator should have a better performance than '' | ||
- | - '' | + | - '' |
+ | <code php> | ||
+ | // Before | ||
+ | array_merge(iterator_to_array($iter1), | ||
+ | |||
+ | // Or to generalise to all iterables | ||
+ | array_merge( is_array($iter1) ? $iter1 : iterator_to_array($iter1), | ||
+ | is_array($iter2) ? $iter2 : iterator_to_array($iter2) ) | ||
+ | |||
+ | // After (handles both cases) | ||
+ | [ ...$iter1, ...$iter2 ] | ||
+ | |||
+ | //Thanks Rowan for providing this example | ||
+ | </ | ||
==== ... should be preserved for other use (e.g. map concat) ==== | ==== ... should be preserved for other use (e.g. map concat) ==== |
rfc/spread_operator_for_array.txt · Last modified: 2019/05/13 12:45 by nikic