3v4l.org

run code in 300+ PHP versions simultaneously
<?php function permutations($set) { $solutions=array(); $n=count($set); $p=array_keys($set); $i=1; while ($i<$n) { if ($p[$i]>0) { $p[$i]--; $j=0; if ($i%2==1) $j=$p[$i]; //swap $tmp=$set[$j]; $set[$j]=$set[$i]; $set[$i]=$tmp; $i=1; $solutions[]=$set; } elseif ($p[$i]==0) { $p[$i]=$i; $i++; } } return $solutions; } $set=array("x1", "x2", "x3"); print_r(permutations($set));
Output for 4.3.0 - 4.3.11, 4.4.0 - 4.4.9, 5.0.0 - 5.0.5, 5.1.0 - 5.1.6, 5.2.0 - 5.2.17, 5.3.0 - 5.3.29, 5.4.0 - 5.4.45, 5.5.0 - 5.5.38, 5.6.0 - 5.6.40, 7.0.0 - 7.0.33, 7.1.0 - 7.1.33, 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.6
Array ( [0] => Array ( [0] => x2 [1] => x1 [2] => x3 ) [1] => Array ( [0] => x3 [1] => x1 [2] => x2 ) [2] => Array ( [0] => x1 [1] => x3 [2] => x2 ) [3] => Array ( [0] => x2 [1] => x3 [2] => x1 ) [4] => Array ( [0] => x3 [1] => x2 [2] => x1 ) )

preferences:
319.15 ms | 407 KiB | 460 Q