У вас может быть два массива: альтернативы и счетчик тока .
$alternatives = array(array('a', 'b', 'c'), array('b'), array('a', 'c'));
$counter = array(0, 0, 0);
Затем в цикле вы увеличиваете «последнюю цифру» счетчика, и еслиэто равно числу альтернатив для этой позиции, вы сбрасываете эту «цифру» в ноль и увеличиваете «цифру», оставленную ей.Это работает так же, как подсчет с десятичными числами.
Строка для каждого шага строится путем объединения $alternatives[$i][$counter[$i]]
для каждой цифры.
Вы закончите, когда «первая цифра» станет слишком большойв качестве количества альтернатив для этой цифры.
Пример: для вышеуказанных переменных счетчик получит следующие значения в шагах:
0,0,0
0,0,1
1,0,0 (overflow in the last two digit)
1,0,1
2,0,0 (overflow in the last two digits)
2,0,1
3,0,0 (finished, since the first "digit" has only 3 alternatives)