1. <?php
  2.  
  3. function g($a, $u = [])
  4. {
  5. $r = [];
  6. $size = sizeof($a);
  7. for ($i = 0; $i < $size; $i++) {
  8. if (empty($u[$i])) {
  9. $u[$i] = true;
  10. $vs = g($a, $u);
  11. $r[] = [$a[$i]];
  12. foreach($vs as $v) {
  13. $r[] = array_merge(array(
  14. $a[$i]
  15. ) , $v);
  16. }
  17.  
  18. $u[$i] = false;
  19. }
  20. }
  21.  
  22. return $r;
  23. }