@lexstile

Как посчитать сумму позиций из 2-х источников?

Как найти общую сумму позиций?
Дано 2 массива, в одном лежит количество, во втором стоимость 1 позиции, их нужно перемножить. Связаны между собой по id.
Я могу сделать это через цикл в цикле, но хочется найти более элегантное решение.
$dishesRequest = collect([
            [
                'id' => 1,
                'quantity' => 4,
            ],
            [
                'id' => 2,
                'quantity' => 8,
            ],
        ]);

        $dishes = collect([
            [
                'id' => 1,
                'price' => 100,
            ],
            [
                'id' => 2,
                'price' => 200,
            ],
        ]);

* collect - коллекция из laravel.
  • Вопрос задан
  • 198 просмотров
Решения вопроса 1
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
В общем случае избежать "цикла в цикле" позволяет использование индексации массива идентификатором и - соответственно - обращение по индексу вместо перебора.
В данном случае вторую коллекцию проиндексировать можно с помощью метода keyBy('id');

И тогда останется только один цикл по первому массиву, в котором обращаться ко второму по id.
То есть сложность будет длина массива * 2 вместо длина массива * длина массива

Если же данные берутся из базы, то, как правильно заметили в комментариях, там же и надо сразу считать

spoiler
Типичный, кстати, вопрос из серии "Выучил ларавель, не выучил программировать"
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы