<?php
declare(strict_types=1);
error_reporting(-1);
ini_set('display_errors', 'On');
function pwr(array $elements, int $k, int $idx = 0, array &$result = []): \Generator
{
foreach ($elements as $element) {
$result[$idx] = $element;
if ($k - $idx > 1) {
yield from pwr($elements, $k, $idx + 1, $result);
}
else {
yield $result;
}
}
}
function gen(array $keys, array $values): \Generator
{
foreach (pwr($values, \count($keys)) as $set) {
yield array_combine($keys, $set);
}
}
foreach (gen(range('a', 'j'), [true, false]) as $case) {
foreach ($case as $k => $v) {
echo $v ? $k : '_';
}
echo "\n";
}
preferences:
49.41 ms | 402 KiB | 5 Q