Я настоятельно рекомендую вам не идти по этому пути, поскольку сложность алгоритма, необходимого для его генерации, составляет O ((n)!), Поэтому это невозможно для любых массивов, превышающих 20 элементов.Событие для массива из 10 элементов будет 3628800 возможных комбинаций для массива с 15 - 1307674368000 для 100 - 9e + 157 (это 9 и 157 нулей)
Ну, я не хотел, но здесь это,Это сгенерирует все возможные комбинации (с n-1 длиной) любого массива (длина n).Я бы не рекомендовал запускать его с длиной массива более 7.
$array = array('foo','bar','love','test');
function getAllCombinations($array)
{
if (count($array)==1)
return ($array);
$res = array();
foreach ($array as $i=>$val)
{
$tArray = $array;
unset($tArray[$i]);
$subRes = getAllCombinations($tArray);
foreach ($subRes as $t)
{
$res[]= $val.' '.$t;
}
}
return $res;
}
foreach ($array as $key=>$val)
{
$tArray = $array;
unset($tArray[$key]);
$res = getAllCombinations($tArray);
foreach ($res as $t)
echo $t.'<br />';
}
Если вы будете использовать это только с 4 элементами в массиве и без дубликатов, вот более короткое и быстрое решение:
$array = array('foo','bar','love','test');
for ($i1=0; $i1<count($array);$i1++)
{
for ($i2=$i1+1; $i2<count($array);$i2++)
{
for ($i3=$i2+1; $i3<count($array);$i3++)
{
echo $array[$i1].' '.$array[$i2].' '.$array[$i3].'<br />';
}
}
}
если вы сортируете исходный массив буквенно-цифровым образом, результат будет также упорядочен буквенно-цифровым образом