Задать вопрос
@testergood

Как построить коллекцию на PHP при заданных ниже условиях?

Есть массив
$maxArray = [5, 10, 7, 18, 3];

Необходимо получить коллекцию вида
от [0, 0, 0, 0, 0] до $maxArray, руководствуясь следующей последовательностью:
[
  [0, 0,  0, 0, 0],
  [1, 0,  0, 0, 0],
  [2, 0,  0, 0, 0],
  ...
  [5, 0,  0, 0, 0],
  [0, 1,  0, 0, 0],
  [1, 1,  0, 0, 0],
  [2, 1,  0, 0, 0],
  ...
  [5, 1,  0, 0, 0],
  [0, 2,  0, 0, 0],
  [1, 2,  0, 0, 0],
  [2, 2,  0, 0, 0],
  ...
  [5,  10,  7, 18, 3]
]


Подойдет только перебор или есть иные способы?
  • Вопрос задан
  • 91 просмотр
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
99% работы с массивами - циклы. Даже под капотом всяких мап тот же цикл, только скомпилированный в функцию. Тут безусловно нужен цикл.
Ответ написан
Комментировать
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Самое тупое и прямое решение как правило самое быстрое
<?php
$maxArray = [5, 10, 7, 18, 3];

$result = [];
for($i4 = 0; $i4 <= $maxArray[4]; $i4++) {
    for($i3 = 0; $i3 <= $maxArray[3]; $i3++) {
        for($i2 = 0; $i2 <= $maxArray[2]; $i2++) {
            for($i1 = 0; $i1 <= $maxArray[1]; $i1++) {
                for($i0 = 0; $i0 <= $maxArray[0]; $i0++) {
                    $result[] = [$i0, $i1, $i2, $i3, $i4];
                }
            }
        }
    }
}

echo join(',', $result[0])."\n";
echo join(',', $result[1])."\n";
echo join(',', $result[2])."\n";
echo join(',', $result[3])."\n";
echo join(',', $result[40127])."\n";

//0,0,0,0,0
//1,0,0,0,0
//2,0,0,0,0
//3,0,0,0,0
//5,10,7,18,3


генерится за 0.0001 сек.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы