// Этот код вычисляет количество максимальных комбинаций
// исходя из размерности, а также инициализирует счетчик,
// в котором хранится информация о текущем значении
// каждого барабана.
$combinations = 1;
for ($i = 0; $i < sizeof($array); $i++) {
$combinations *= sizeof($array[$i]);
$currentKeys[$i] = 0;
}
// ...
// Вычисляет последний разряд (последний барабан, который
// будет крутиться) при прохождении 1-го километра трассы
$n = sizeof($array)-1;
// ...
// Цикл, делаем его столько, сколько есть возможных
// комбинаций
for ($i = 0; $i < $combinations; $i++) {
// ...
// Собираем показания счетчика пробега
for ($k = 0; $k < sizeof($array); $k++) {
// ...
// Наш водитель проехал еще один километр
$currentKeys[$n]++;
// ...
// ...
// следующий блок цикла играет своего рода роль "палочек на
// барабане", которые инкриминируют следующий левее
// барабан и обнуляют значения текущего барабана.
for ($k = sizeof($array)-1; $k >= 0; $k--) {