все варианты перестановок массива
private function permutations($input)
{
if (count($input) <= 1) return array($input);
$result = array();
foreach ($input as $v) {
$reduce = array_filter($input,
function ($e) use ($v) {
return $e !== $v;
}
);
$result = array_merge($result,
array_map(
function ($e) use ($v) {
array_unshift($e, $v);
return $e;
},
$this->permutations($reduce)
)
);
}
return $result;
}