Задать вопрос

Как найти все возможные неповторяющиеся комбинации из слов на PHP?

Есть массив:
array(
0 => 'один',
1 => 'два',
3 => 'три',
4 => 'четыре',
5 => 'пять',
6 => 'шесть'
);


Как можно найти все возможные неповторяющиеся комбинации из этих слов?
Т.е. например нужно получить подобное:
array(
0 => array('один', 'два', 'три', 'четыре', 'пять', 'шесть'),
1 => array('один', 'два', 'три', 'четыре', 'пять'),
3 => array('один', 'два', 'три', 'четыре'),
4 => array('один', 'два', 'три'),
5 => array('один', 'два'),
6 => array('один'),
7 => array('один', 'три', 'четыре', 'пять', 'шесть'),
8 => array('два', 'три', 'четыре', 'пять', 'шесть'),
9 => array('четыре', 'пять', 'шесть'),
//и т.д.
);


Голову сломал уже всю. Не могу сообразить.
  • Вопрос задан
  • 3574 просмотра
Подписаться 5 Оценить Комментировать
Ответ пользователя egor_nullptr К ответам на вопрос (3)
egor_nullptr
@egor_nullptr
Для версий PHP до 5.5

function gen_wc(array $array)
{
    $res = [];

    for ($i = 1; $i < pow(2, count($array)); ++$i) {
        $pre = [];
        for ($j = 0; $j < count($array); ++$j) {
            if ($i & pow(2, $j)) {
                $pre[] = $array[$j];
            };
        };
        $res[] = $pre;
    };

    return $res;
};

print_r(gen_wc(['один', 'два', 'три', 'четыре', 'пять', 'шесть']));
Ответ написан