Как построить коллекцию на 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] ] |
[ [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] ]
Подойдет только перебор или есть иные способы?
Дополнительно:
Ответы:
99% работы с массивами - циклы. Даже под капотом всяких мап тот же цикл, только скомпилированный в функцию. Тут безусловно нужен цикл.
Самое тупое и прямое решение как правило самое быстрое
<?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 |
<?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 сек.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для построения коллекции на PHP с определенными условиями, мы можем использовать массивы или классы, в зависимости от требований задачи. Ниже приведены примеры решений для каждого случая:
1. Использование массивов:
Если у нас есть набор данных, которые не требуют дополнительной логики или методов, мы можем использовать простой массив для построения коллекции. Например, если нам нужно создать коллекцию чисел:
$numbers = [1, 2, 3, 4, 5];
2. Использование классов:
Если нам нужно добавить дополнительную логику или методы для работы с коллекцией, мы можем создать класс, который будет представлять нашу коллекцию. Например, если у нас есть коллекция пользователей, мы можем создать класс UserCollection:
class UserCollection {private $users = [];
public function add(User $user) {
$this->users[] = $user;
}
public function getUsers() {
return $this->users;
}
}
class User {
private $name;
public function __construct($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
$userCollection = new UserCollection();
$userCollection->add(new User('Alice'));
$userCollection->add(new User('Bob'));
$users = $userCollection->getUsers();
foreach ($users as $user) {
echo $user->getName() . "