<?php
$array = [ 1 , 2 , 3 , 4 ] ;
function getFactorial( $array ) {
$factorial = 1 ;
for ( $n = 1 ; $n <= count ( $array ) ; $n ++ ) { $factorial *= $n ;
}
return $factorial ;
}
$factorial = getFactorial( $array ) ;
function getCombinations( $array ) {
$output = [ ] ;
$iterations = 2 ;
} else {
$iterations = count ( $array ) * 2 ; $halfIterations = $iterations / 2 ;
}
while ( $iterations > 0 ) {
$combination = [ ] ;
foreach ( $array as $key => $value ) {
$firstKey = array_key_first( $array ) ;
if ( $key == array_key_last( $array ) ) {
$combination [ $key ] = $array [ $firstKey ] ;
} else {
$combination [ $key ] = next ( $array ) ; }
}
if ( $iterations <= $halfIterations ) {
}
$array = $combination ;
$output [ ] = $combination ;
$iterations --;
}
return $output ;
}
function Main( $array ) {
$str = "" ;
$count = ( count ( $array ) - 1 ) ; return $array ;
} else {
for ( $n = 0 ; $n <= $count ; $n ++ ) {
$cutElement = $array [ $n ] ;
$combinations = getCombinations( $array , $factorial ) ;
foreach ( $combinations as $key => $value ) {
$str .= implode ( " " , $combinations [ $key ] ) ; $str .= "\n " ;
}
$array [ $n ] = $cutElement ;
}
}
return $str ;
}
$res = Main( $array ) ;
echo $res ;
PD9waHAKCmVycm9yX3JlcG9ydGluZygtMSk7CgokYXJyYXkgPSBbMSwgMiwgMywgNF07CgpmdW5jdGlvbiBnZXRGYWN0b3JpYWwoJGFycmF5KXsKCSRmYWN0b3JpYWwgPSAxOwoJZm9yKCRuID0gMTsgJG48PWNvdW50KCRhcnJheSk7ICRuKyspewoJCSRmYWN0b3JpYWwgKj0gJG47Cgl9CglyZXR1cm4gJGZhY3RvcmlhbDsKfQoKJGZhY3RvcmlhbCA9IGdldEZhY3RvcmlhbCgkYXJyYXkpOwoKZnVuY3Rpb24gZ2V0Q29tYmluYXRpb25zKCRhcnJheSl7Cgkkb3V0cHV0ID0gW107CglpZihjb3VudCgkYXJyYXkpID09IDIpewoJCSRpdGVyYXRpb25zID0gMjsKCX0gZWxzZSB7CgkJJGl0ZXJhdGlvbnMgPSBjb3VudCgkYXJyYXkpICogMjsKCQkkaGFsZkl0ZXJhdGlvbnMgPSAkaXRlcmF0aW9ucyAvIDI7Cgl9Cgl3aGlsZSgkaXRlcmF0aW9ucyA+IDApewoJCSRjb21iaW5hdGlvbiA9IFtdOwoJCWZvcmVhY2goJGFycmF5IGFzICRrZXkgPT4gJHZhbHVlKXsKCQkJJGZpcnN0S2V5ID0gYXJyYXlfa2V5X2ZpcnN0KCRhcnJheSk7CgkJCWlmKCRrZXkgPT0gYXJyYXlfa2V5X2xhc3QoJGFycmF5KSl7CgkJCQkkY29tYmluYXRpb25bJGtleV0gPSAkYXJyYXlbJGZpcnN0S2V5XTsKCQkJfSBlbHNlIHsKCQkJCSRjb21iaW5hdGlvblska2V5XSA9IG5leHQoJGFycmF5KTsKCQkJfQoJCX0KCQlpZigkaXRlcmF0aW9ucyA8PSAkaGFsZkl0ZXJhdGlvbnMpewoJCQlrcnNvcnQoJGNvbWJpbmF0aW9uKTsKCQl9CgkJJGFycmF5ID0gJGNvbWJpbmF0aW9uOwoJCSRvdXRwdXRbXSA9ICRjb21iaW5hdGlvbjsKCQkkaXRlcmF0aW9ucy0tOwoJfQoJcmV0dXJuICRvdXRwdXQ7Cn0KCmZ1bmN0aW9uIE1haW4oJGFycmF5KXsKCSRzdHIgPSAiIjsKCSRjb3VudCA9IChjb3VudCgkYXJyYXkpIC0gMSk7CglpZihjb3VudCgkYXJyYXkpID09IDEpewoJCXJldHVybiAkYXJyYXk7Cgl9IGVsc2UgewoJCWZvcigkbiA9IDA7ICRuIDw9ICRjb3VudDsgJG4rKyl7CgkJCSRjdXRFbGVtZW50ID0gJGFycmF5WyRuXTsKCQkJdW5zZXQoJGFycmF5WyRuXSk7CgkJCSRjb21iaW5hdGlvbnMgPSBnZXRDb21iaW5hdGlvbnMoJGFycmF5LCAkZmFjdG9yaWFsKTsKCQkJZm9yZWFjaCgkY29tYmluYXRpb25zIGFzICRrZXkgPT4gJHZhbHVlKXsKCQkJCWFycmF5X3Vuc2hpZnQoJGNvbWJpbmF0aW9uc1ska2V5XSwgJGN1dEVsZW1lbnQpOwoJCQkJJHN0ciAuPSBpbXBsb2RlKCIgIiwgJGNvbWJpbmF0aW9uc1ska2V5XSk7CgkJCQkkc3RyIC49ICJcbiI7CgkJCX0KCQkJJGFycmF5WyRuXSA9ICRjdXRFbGVtZW50OwoJCX0KCX0KCXJldHVybiAkc3RyOwp9CgokcmVzID0gTWFpbigkYXJyYXkpOwplY2hvICRyZXM7