Перебор всех возможных комбинаций из символов

konoplya

Постоялец
Заблокирован
Регистрация
3 Авг 2008
Сообщения
104
Реакции
20
  • Автор темы
  • Заблокирован
  • #1
В общем суть вопроса такова. Как сделать перебор и вывод всех возможных комбинаций на основе имеющихся символов?

Например, у меня есть символы : "a,b,c". Как сделать перебор, чтобы мне выдало:

а
аа
ааа
b
bb
bbb
c
cc
ccc
ab
ac
aab
aac
ba
bba
bc
bca
....(и так далее)

нашёл такой пример:


но он чёто совсем не пашет :(
 
Поехали по порядку.

PHP:
$words = 'abc123'; //массив
Это явно не массив. Вместо массива подставлена обычная текстовая строка.

PHP:
$symbols[] = $size[$i].$size[$m].$size[$x];
Какого черта строка комбинации формируется не из массива символов, а из переменной длины массива?

Кроме того, в таком виде, как сейчас, будут формироваться только трехзначные комбинации.

Рабочий код:
PHP:
<pre>
<?php
$words = array ('a', 'b', 'c', '1', '2', '3');

$size = count ($words);

$symbols = array ( );

for ($i = 0; $i < $size; $i++) {
    $symbols[] = $words[$i];
    for ($m = 0; $m < $size; $m++) {
        $symbols[] = $words[$i].$words[$m];
        for ($x = 0; $x < $size; $x++) {
            $symbols[] = $words[$i].$words[$m].$words[$x];
        }
    }
}
print_r($symbols);
?>
</pre>
 
  • Автор темы
  • Заблокирован
  • #3
А понял, теперь и правда рабочий.)) То бишь, если выводить не три, а, к примеру, четыре знака, то получится та же самая конструкция с новым циклом:







И если символов под вывод требуется больше, вводится дополнительный цикл.

Единственное, при таком подходе конструкция получается громоздкой. А как ему тогда сказать, чтобы он автоматом перебрал и вывел все возможные варианты из имеющихся в массиве символов?
 
Назад
Сверху