Хочу сказать всем спасибо кто оказывает поддержку! $pr = "коля вася инна рома"; $pr = explode(" ", $pr); Надо чтобы получался вот такой результат Первый перебор $a = коля $a = вася $a = инна $a = рома Второй перебор $a = коля вася $a = коля вася инна $a = коля вася инна рома Третий перебор $a = вася инна $a = вася инна рома Четвертый перебор $a = инна рома Все! (только это как пример, там может быть и больше слов, значит и больше переборов )
простейший алгоритм.... генерируете двоичные числа длинны N путем +1 к предыдущему результату от 0000000....0 - длина N до 11111111....1 - длина N где 1 в соотв позиции будет означать элемент массива... например если Вася, Петя, Катя - то 101 - это Вася, Катя я ведь правильно понимаю - вам неважно Катя, Петя или Петя, Катя - то есть порядок .. главное состав группы? Вот вам и будут точно всевозможные варианты - от пустого - до самого массива а вообще есть целый раздел математики - комбинаторика, ее даже в школе начинают изучать ... там довольно доходчиво описаны такие штуки..... и называются они не переборы (это гитарные переборы бывают) а сочетания, сочетания без повторений, размещения итд.... там же есть формулы - которые определяют конечное количество таких сочетаний.... фигурируют факториалы... и уже при N = 30 там что то заоблачное начнается для компов) по крайней мере стандартных скриптов пхп
первый же ответ по вашему вопросу https://ru.stackoverflow.com/questions/154252/Все-возможные-комбинации-одномерного-массива
@drakonik999, тут придется на два этапа разбивать: сначала вывести все элементы по одному (один цикл), а потом комбинации не менее 2х (в два цикла)
@drakonik999, уточню предыдущего оратора: "в три цикла" Спойлер PHP: $arr = range(1, 7); foreach($arr as $value) { echo $value.' '; } echo '<br><br>'; $N = count($arr); for($i = 0; $i < $N-1; $i++) { for($k = $i+1; $k < $N; $k++) { for($j = $i; $j <= $k; $j++) { echo $arr[$j].' '; } echo '<br>'; } echo '<br>'; }
@Sail, у меня получилось в два) Спойлер: Решение с 1 + 2 цикла PHP: $a = 'а б в г'; $b = explode(' ', $a); $n = count($b); foreach($b as $d) { echo $d . '<br>'; } foreach($b as $i => $c) { for ($k=2; $k < ($n - $i + 1); $k++) { echo implode(' ', array_slice($b, $i, $k)) . '<br>'; } } последний Ваш цикл я заменил на array_slice.