@anton99zel
29а класс средней школы №7

Как в массиве убрать дубль?

Упрощенная версия вопроса
spoiler
<?
$obBasket = \Bitrix\Sale\Basket::getList(array('filter' => array('ORDER_ID' => 13329)));
while($bItem = $obBasket->Fetch())
{echo $bItem[PRODUCT_ID].' - '.$bItem[QUANTITY].'</br>';};
?>
покажет 
30955 - 1
30955 - 1
154835 - 1
А как сделать так?:
30955 - 2
154835 - 1

Полная версия вопроса
spoiler
<?
$obBasket = \Bitrix\Sale\Basket::getList(array('filter' => array('ORDER_ID' => $orderId)));
while($bItem = $obBasket->Fetch()){
$price_s = round($bItem[PRICE],2);
$kolvo_s = round($bItem[QUANTITY],2);
{?>$.post(
                "https://www.google-analytics.com/collect",
                {
                        v: '1',
                        tid: 'UA-xxxxxxxxxxxx-1',
                        cid: '<?=$result_idcode?>',
                        t: 'item',
                        ti: '<?=$orderId?>',
                        in: '<?=$bItem[NAME]?>',
                        ip: '<?=$price_s?>',
                        iv: '<?=$nn?>',
                        iq: '<?=$kolvo_s?>',
                        ic: '<?=$bItem[PRODUCT_ID]?>'
                },
        )
<?};
}
?>

Этот код в моем случае иногда выводит один и тот же товар дважды (так должно быть, просто товар может иметь разные свойства).
Так вот, попадая в аналитику, товар с одним и тем же ID исключается из статистики google
Потому, хочу сделать, чтобы если в массиве более одного товара с таким же ID, то вывести товар один раз, и прибавить количество дублей к iq.
Сейчас так:
spoiler
$.post(
                "https://www.google-analytics.com/collect",
                {
                        v: '1',
                        tid: 'UA-xxxxxxxxxxxx-1',
                        cid: 'xxxxxxxxxxxx.xxxxxxxxxxxx",
                        t: 'item',
                        ti: '1000', //ID номер заказа
                        in: 'Товар 1', //название
                        ip: '999', // цена
                        iv: 'Категория',
                        iq: '1',  // Количество этого товара
                        ic: '10020' // ID Товара
                },
        )
$.post(
                "https://www.google-analytics.com/collect",
                {
                        v: '1',
                        tid: 'UA-xxxxxxxxxxxx-1',
                        cid: 'xxxxxxxxxxxx.xxxxxxxxxxxx",
                        t: 'item',
                        ti: '1000', //ID номер заказа
                        in: 'Товар 2', //название
                        ip: '100', // цена
                        iv: 'Категория Б',
                        iq: '1',  // Количество этого товара
                        ic: '10099' // ID Товара
                },
        )
$.post(
                "https://www.google-analytics.com/collect",
                {
                        v: '1',
                        tid: 'UA-xxxxxxxxxxxx-1',
                        cid: '<?=$result_idcode?>',
                        t: 'item',
                       ti: '1000', //ID номер заказа
                        in: 'Товар 2', //название
                        ip: '100', // цена
                        iv: 'Категория Б',
                        iq: '1',  // Количество этого товара
                        ic: '10099' // ID Товара
                },
        )

Как видно вывелось три товара, два нижних из них являются одинаковыми, как не выводить дубль, а просто ко второму товару прибавить указание количества iq: '2', // Количество этого товара
Чтобы в итоге было так:
spoiler
$.post(
                "https://www.google-analytics.com/collect",
                {
                        v: '1',
                        tid: 'UA-xxxxxxxxxxxx-1',
                        cid: '<?=$result_idcode?>',
                        t: 'item',
                        ti: '1000', //ID номер заказа
                        in: 'Товар 1', //название
                        ip: '999', // цена
                        iv: 'Категория',
                        iq: '1',  // Количество этого товара
                        ic: '10020' // ID Товара
                },
        )
$.post(
                "https://www.google-analytics.com/collect",
                {
                        v: '1',
                        tid: 'UA-xxxxxxxxxxxx-1',
                        cid: 'xxxxxxxxxxxx.xxxxxxxxxxxx",
                        t: 'item',
                        ti: '1000', //ID номер заказа
                        in: 'Товар 2', //название
                        ip: '100', // цена
                        iv: 'Категория Б',
                        iq: '2',  // Количество этого товара - ДОБАВИЛИ КОЛИЧЕСТВО
                        ic: '10099' // ID Товара
                },
        )
  • Вопрос задан
  • 67 просмотров
Пригласить эксперта
Ответы на вопрос 2
AlexeyCaTHaR
@AlexeyCaTHaR
А почему бы в цикле не заполнять какой-то временный массив, в котором ключами будут ID товара, а в значении параметры и при дубле товара просто увеличивать кол-во?

Ну и потом по массиву уже строить вывод данных
Ответ написан
Комментировать
gromdron
@gromdron
Работаю с Bitrix24
Что касается вопроса "в лоб": почему бы не использовать агрегирующую функцию SUM для вычисления общего количества и группировку по PRODUCT_ID?

Что касается формальной стороны: это не лучший вариант, ведь у вас может быть 2 товара отпущенных по разной цене. Т.е. товар 3022 отпущенный по 130 рублей в количестве 2х штук и еще 1 шт. товара 3022 по 100 рублей (например при покупк 2х скидка на третью вещь 30 рублей).
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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