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

Ссылка скопирована
1 ответ

Есть массив
$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 сек.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Игорь Волков Ответ

Для построения коллекции на PHP с определенными условиями, мы можем использовать массивы или классы, в зависимости от требований задачи. Ниже приведены примеры решений для каждого случая:

1. Использование массивов:
Если у нас есть набор данных, которые не требуют дополнительной логики или методов, мы можем использовать простой массив для построения коллекции. Например, если нам нужно создать коллекцию чисел:

$numbers = [1, 2, 3, 4, 5];

$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() . "

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно