<?php

error_reporting(-1);

$array = [1, 2, 3];

function getFactorial($array){
	$factorial = 1;
	for($n = 1; $n<=count($array); $n++){
		$factorial *= $n;
	}
	return $factorial;
}

$factorial = getFactorial($array);

function getCombination($array){
	$combination = [];
	for($n = 0; $n<=(count($array) - 1); $n++){
		if(($n+1) > (count($array) - 1)){
			$combination[] = $array[0];
		} else {
			$combination[] = $array[$n+1];
		}
	}
	return $combination;
}

function Main($factorial, $array){
	$halfFactorial = $factorial/2;
	$combination = getCombination($array);
	while($factorial > 0){
		$combination = getCombination($combination);
		if($factorial <= $halfFactorial){
			krsort($combination);
		}
		print_r($combination);
		$factorial--;
	}
}

Main($factorial, $array);