Подскажите возможно соединить массивы в один, у меня заказ записывает в одну таблицу order, а товар в order_product.
order
Array
(
[0] => Array(
[order_id] => 52
[firstname] => test
[lastname] => tst
[email] => Test
[telephone] => test
[payment_address_1] => Отделение №1: ул. Гагарина,22
[payment_method] => Новая почта
[date_added] => 2017-03-15 15:51:44
[date_modified] => 2017-03-15 15:51:44
)
)
order_product
Array
(
[0] => Array
(
[order_product_id] => 281
[id_order] => 52
[name] => Тапочки
[model] => Закрытые
[quantity] => 1
[total] => 25.00
[oll_total] => 25.00
)
[1] => Array
(
[order_product_id] => 280
[id_order] => 52
[name] => Носки
[model] => Закрытые
[quantity] => 1
[total] => 20.50
[oll_total] => 20.50
)
Возможно получить массив такова вида
Array
(
[0] => Array(
[order_id] => 52
[firstname] => test
[lastname] => tst
[email] => Test
[telephone] => test
[payment_address_1] => Отделение №1: ул. Гагарина,22
[payment_method] => Новая почта
[name] => Тапочки,Носки
[oll_total] => 25.00+20,05
[date_added] => 2017-03-15 15:51:44
[date_modified] => 2017-03-15 15:51:44
)
)
Ответ
Вариант 1. Запрос в базу. Пример для MySQL:
SELECT o.*, GROUP_CONCAT(op.name SEPARATOR ', ') AS name, SUM(op.oll_total) AS oll_total
FROM order_table o
LEFT JOIN order_product_table op ON op.order_product_id = o.order_id
GROUP BY o.order_id
Вариант 2. Цикл в PHP, если у вас 2 массива
$result = [];
foreach ($orders as $key => $order)
{
$result[$key] = $order + ['name' => [], 'oll_total' => 0];
foreach ($order_products as $key2 => $product)
{
if ($product['order_product_id'] == $order['order_id'])
{
$result[$key]['name'][] = $product['name'];
$result[$key]['oll_total'] += $product['oll_total'];
}
}
$result[$key]['name'] = implode(', ', $result[$key]['name']);
}
Готовой функции нет.
В вашем конкретном случае я бы выбрала вариант 1.
Комментариев нет:
Отправить комментарий