Я пытаюсь вычислить все комбинации набора значений в массиве для нескольких входов. Подобно этому вопросу:Эффективный алгоритм PHP для генерации всех комбинаций/перестановок входов
PHP algorithm to generate all combinations of a specific size from a single set
Например:
function sampling($chars, $size, $combinations = array()) {
if (empty($combinations)) {
$combinations = $chars;
}
if ($size == 1) {
return $combinations;
}
$new_combinations = array();
foreach ($combinations as $combination) {
foreach ($chars as $char) {
$new_combinations[] = $combination . $char;
}
}
return sampling($chars, $size - 1, $new_combinations);
}
$chars = array('a', 'b', 'c');
$output = sampling($chars, 2);
echo implode($output,', ');
Выход:
aa, ab, ac, ba, bb, bc, ca, cb, cc
Но беда в том, когда я сползать это до большего списка, например:
$chars = array('a', 'b', 'c', 'd');
$output = sampling($chars, 12);
Число перестановок резко возрастает, и у PHP заканчивается память. По-видимому, решение этого - использовать генераторы и давать результаты во время цикла. Единственные примеры генераторов, хотя и являются для несколько иной задачи устанавливает:
См: https://stackoverflow.com/a/27160465/345086
Любые идеи о том, как использовать генераторы, чтобы решить эту проблему?
От манжеты, я бы сказал, что-то вроде логики типа пагинации. используйте переменную $ _GET для длины и начального номера, затем отобразите их только на экране и покажите больше на другой загрузке страницы. – Stevish
1) Вы хотите получить комбинацию сейчас или перестановку? 2) Вы передаете '12' как длину, но получаете' aa' в результате ?! 3) Каков ожидаемый результат с '[a, b, c]' и длиной '3'? – Rizier123
'[a, b, c]' length '12' будет:' aaaaaaaaaaaa, aaaaaaaaaab, aaaaaaaaaac. Надеюсь, это поможет! – Luc