3v4l.org

run code in 300+ PHP versions simultaneously
<?php function chained(iterable ...$input): Generator { foreach ($input as $iterable) { yield from $iterable; } } echo "The \"chained\" iterable contains all elements, using a generator: "; foreach(chained( [1,2,3], [4,5], ) as $item){ echo "$item "; } echo "\n\n"; echo "However, when it comes to converting the generator to array, there is a caveat:\n"; $numbers = chained( [1,2,3], [4,5], ); print_r( iterator_to_array($numbers) ); echo "\n"; echo "The issue is caused by overlapping keys. See how they appear in the sequence:\n"; foreach(chained( [1,2,3], [4,5], ) as $key => $item){ echo "[$key] => $item\n"; } echo "\n\n"; echo "The issue is not present when the keys do not overlap:\n"; $numbers = chained( [1,2,3], [10 => 4,5], ); print_r( iterator_to_array($numbers) );
Output for git.master_jit, git.master, rfc.property-hooks
The "chained" iterable contains all elements, using a generator: 1 2 3 4 5 However, when it comes to converting the generator to array, there is a caveat: Array ( [0] => 4 [1] => 5 [2] => 3 ) The issue is caused by overlapping keys. See how they appear in the sequence: [0] => 1 [1] => 2 [2] => 3 [0] => 4 [1] => 5 The issue is not present when the keys do not overlap: Array ( [0] => 1 [1] => 2 [2] => 3 [10] => 4 [11] => 5 )

This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.

Active branches

Archived branches

Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page


preferences:
27.11 ms | 406 KiB | 5 Q