@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 Товара
                },
        )
  • Вопрос задан
  • 70 просмотров
Пригласить эксперта
Ответы на вопрос 2
AlexeyCaTHaR
@AlexeyCaTHaR
А почему бы в цикле не заполнять какой-то временный массив, в котором ключами будут ID товара, а в значении параметры и при дубле товара просто увеличивать кол-во?

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

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

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

Похожие вопросы