получение всех возможных сочетаний элементов массива

Stierus

Новичок
получение всех возможных сочетаний элементов массива

есть массив, содержащий строки. Количество элементов в массиве заранее неизвестно. Как можно получить массив, содержащий в себе строки, представляющие собой сочетание строк из первого массива ?
т.е есть массив
$ishodnij = array(
'0'=>'stroka1',
'1'=>'stroka2',
'2'=>'stroka3');

Нам нужно получить массив вида :
$polu4enij = array(
'0'=>'stroka1stroka2stroka3',
'1'=>'stroka1stroka3stroka2',
'2'=>'stroka2stroka1stroka3',
.......

и тд во всех возможных комбинациях.
Я так понимаю, нам нужно получаемую строку генерировать вложенными циклами, но этих вложенных циклов столько, сколько и элементов исходного массива ( число которых мы не знаем ) ... да и не хотелось бы столько итераций, наверняка кто-то уже сталкивался с этой проблемой
 

partizan

Новичок
Ну, для того кто учился программировать не по самоучителю "PHP за 24 часа" - это не проблемма.

Самый простой способ - рекурсия

-~{}~ 08.02.07 21:25:

А если красиво - то так:

PHP:
$ishodnij = array('1', '2', '3', '4', '5');

     $count = count($ishodnij);

     for ($i=0;$i<$count;$i++)
     {
         $used[$i] = false;
     };

     $k = 0;
     $take[0] = -1;
     
     while ($k>=0)
     {
         while (($i = ++$take[$k])<$count)
         {
             if (!$used[$i])
             {
                 if ($count == ($k+1))
                 {

                     $str = '';
                     for ($j=0;$j<$count;$j++)
                     {
                         $str .= $ishodnij[$take[$j]];
                     };
                     $polu4enij[] = $str;
                 }
                 else
                 {
                     $used[$i] = true;
                     $take[++$k] = -1;
                 };
             };
         };

         if (--$k>=0)
            $used[$take[$k]] = false;
     };
     
     print_r($polu4enij);
 
Сверху