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(['один', 'два', 'три', 'четыре', 'пять', 'шесть']));
function gen_wc(array $array)
{
yield $array;
if (count($array) > 1) {
for ($i = count($array) - 1; $i >= 0; --$i) {
$sub = $array;
unset($sub[$i]);
foreach (gen_wc(array_values($sub)) as $a) {
yield $a;
};
};
};
};
$src = ['один', 'два', 'три', 'четыре', 'пять', 'шесть'];
$res = [];
foreach (gen_wc($src) as $a) {
$res[crc32(implode(',', $a))] = $a;
};
print_r(array_values($res));