Помогите сделать

Добрый день. Помогите мне тоже, пожалуйста :)

Есть пара запросов к базе:
Код:
// получаем корзину текущего пользователя
    $basketRes = Sale\Internals\BasketTable::getList(array(
    'filter' => array(
        'FUSER_ID' => Sale\Fuser::getId(),
        'ORDER_ID' => null,
        'CAN_BUY' => 'Y',
        )
    ));


    while ($item = $basketRes->fetch()) {
        $inBasket[] = $item;

    }
  
    foreach ($inBasket as $arr_product_id => $tovar ) {

        $id_tovara = $tovar['ID'];


    }

Если печатаю в цикле то выводит несколько значений, так и нужно.

Код:
      echo '<pre>';          
        print_r($id_tovara);
        echo '</pre>';
Если за циклом, только последнее.
Как заставить запомнить значения за циклом?
 
Добрый день. Помогите мне тоже, пожалуйста :)

Есть пара запросов к базе:
Код:
// получаем корзину текущего пользователя
    $basketRes = Sale\Internals\BasketTable::getList(array(
    'filter' => array(
        'FUSER_ID' => Sale\Fuser::getId(),
        'ORDER_ID' => null,
        'CAN_BUY' => 'Y',
        )
    ));


    while ($item = $basketRes->fetch()) {
        $inBasket[] = $item;

    }
 
    foreach ($inBasket as $arr_product_id => $tovar ) {

        $id_tovara = $tovar['ID'];


    }

Если печатаю в цикле то выводит несколько значений, так и нужно.

Код:
      echo '<pre>';         
        print_r($id_tovara);
        echo '</pre>';
Если за циклом, только последнее.
Как заставить запомнить значения за циклом?
Так вы в цикле просто перезаписываете переменную вот оно и выводить последнее значение.Чтобы у вас были все значения просто создайте массив
Запишите вот так $id_tovara[] = $tovar['ID'];
 
Если делаю так то получаю:
$id_tovara[] = $tovar['ID'];
Array
(
[0] => 11308
[1] => 11311
)
Если делаю так то получаю:
$id_tovara['ID'] = $tovar['ID'];
Array
(
[ID] => 11311
)
мне нужно как во втором варианте только чтоб оба значения были. В дальнейшем надо будет найти по этому id и поменять значения
просто тут не только id вывести надо, еще несколько значений price_id, name ну и еще несколько
 
Если делаю так то получаю:
$id_tovara[] = $tovar['ID'];
Array
(
[0] => 11308
[1] => 11311
)
Если делаю так то получаю:
$id_tovara['ID'] = $tovar['ID'];
Array
(
[ID] => 11311
)
мне нужно как во втором варианте только чтоб оба значения были. В дальнейшем надо будет найти по этому id и поменять значения
просто тут не только id вывести надо, еще несколько значений price_id, name ну и еще несколько
Если я вас правильно понял тогда сделайте так: $id_tovara[$tovar['ID']] = $tovar['ID'];
 
А зачем вообще делать обход массива $inBasket ?) Я бы выбросил foreach и работал напрямую с массивом товаров. Скиньте сюда вывод:
PHP:
print_r($inBasket);
, тогда напишу подробнее.
 
Код:
Array
(
    [0] => Array
        (
            [ID] => 11308
            [LID] => s1
            [FUSER_ID] => 1539975
            [ORDER_ID] =>
            [PRODUCT_ID] => 19639
            [PRODUCT_PRICE_ID] => 19639
            [PRICE_TYPE_ID] =>
            [NAME] => АКБ  Highscreen Spark 1500 mAh
            [PRICE] => 380.0000
            [CURRENCY] => RUB
            [BASE_PRICE] => 380.0000
            [VAT_INCLUDED] => Y
            [DATE_INSERT] => Bitrix\Main\Type\DateTime Object
                (
                    [value:protected] => DateTime Object
                        (
                            [date] => 2018-02-07 13:28:40.000000
                            [timezone_type] => 3
                            [timezone] => Asia/Krasnoyarsk
                        )

                )

            [DATE_UPDATE] => Bitrix\Main\Type\DateTime Object
                (
                    [value:protected] => DateTime Object
                        (
                            [date] => 2018-02-07 13:28:40.000000
                            [timezone_type] => 3
                            [timezone] => Asia/Krasnoyarsk
                        )

                )

            [DATE_REFRESH] =>
            [WEIGHT] => 0.00
            [QUANTITY] => 1.0000
            [DELAY] => N
            [CAN_BUY] => Y
            [MODULE] => catalog
            [PRODUCT_PROVIDER_CLASS] => \Bitrix\Catalog\Product\CatalogProvider
            [NOTES] =>
            [DETAIL_PAGE_URL] => /catalog/aksessuary/akkumulyatory/akb_raznoe/akb_highscreen_spark_1500_mah.html
            [DISCOUNT_PRICE] => 0.0000
            [CATALOG_XML_ID] => 75f538c3-20e6-490e-b5a5-e55455bcea4d
            [PRODUCT_XML_ID] => e3601e47-647c-11e7-8101-00155d024b05
            [DISCOUNT_NAME] => []
            [DISCOUNT_VALUE] =>
            [DISCOUNT_COUPON] =>
            [VAT_RATE] =>
            [SUBSCRIBE] => N
            [RESERVED] => N
            [RESERVE_QUANTITY] =>
            [BARCODE_MULTI] => N
            [CUSTOM_PRICE] => N
            [DIMENSIONS] => a:3:{s:5:"WIDTH";s:1:"0";s:6:"HEIGHT";s:1:"0";s:6:"LENGTH";s:1:"0";}
            [TYPE] =>
            [SET_PARENT_ID] =>
            [MEASURE_CODE] => 796
            [MEASURE_NAME] => шт
            [CALLBACK_FUNC] =>
            [ORDER_CALLBACK_FUNC] =>
            [CANCEL_CALLBACK_FUNC] =>
            [PAY_CALLBACK_FUNC] =>
            [RECOMMENDATION] =>
            [SORT] => 100
        )

    [1] => Array
        (
            [ID] => 11311
            [LID] => s1
            [FUSER_ID] => 1539975
            [ORDER_ID] =>
            [PRODUCT_ID] => 5989
            [PRODUCT_PRICE_ID] => 5989
            [PRICE_TYPE_ID] =>
            [NAME] => АКБ для ноутбука Asus M5 (4400mAh)  M5000, S5, W5, W6, Z30, Z31, Z33, Z35 серии  черная (A31-S5)
            [PRICE] => 1485.0000
            [CURRENCY] => RUB
            [BASE_PRICE] => 1485.0000
            [VAT_INCLUDED] => Y
            [DATE_INSERT] => Bitrix\Main\Type\DateTime Object
                (
                    [value:protected] => DateTime Object
                        (
                            [date] => 2018-02-07 16:19:08.000000
                            [timezone_type] => 3
                            [timezone] => Asia/Krasnoyarsk
                        )

                )

            [DATE_UPDATE] => Bitrix\Main\Type\DateTime Object
                (
                    [value:protected] => DateTime Object
                        (
                            [date] => 2018-02-07 16:19:08.000000
                            [timezone_type] => 3
                            [timezone] => Asia/Krasnoyarsk
                        )

                )

            [DATE_REFRESH] =>
            [WEIGHT] => 0.00
            [QUANTITY] => 1.0000
            [DELAY] => N
            [CAN_BUY] => Y
            [MODULE] => catalog
            [PRODUCT_PROVIDER_CLASS] => \Bitrix\Catalog\Product\CatalogProvider
            [NOTES] =>
            [DETAIL_PAGE_URL] => /catalog/zapchasti_dlya_noutbukov/akkumulyatory_2/asus_4/akb_dlya_noutbuka_asus_m5_4400mah_m5000_s5_w5_w6_z30_z31_z33_z35_serii_chernaya_a31_s5.html
            [DISCOUNT_PRICE] => 0.0000
            [CATALOG_XML_ID] => 75f538c3-20e6-490e-b5a5-e55455bcea4d
            [PRODUCT_XML_ID] => 35ff4e83-d9e2-11e4-96e4-0019db49d70a
            [DISCOUNT_NAME] => []
            [DISCOUNT_VALUE] =>
            [DISCOUNT_COUPON] =>
            [VAT_RATE] =>
            [SUBSCRIBE] => N
            [RESERVED] => N
            [RESERVE_QUANTITY] =>
            [BARCODE_MULTI] => N
            [CUSTOM_PRICE] => N
            [DIMENSIONS] => a:3:{s:5:"WIDTH";s:1:"0";s:6:"HEIGHT";s:1:"0";s:6:"LENGTH";s:1:"0";}
            [TYPE] =>
            [SET_PARENT_ID] =>
            [MEASURE_CODE] => 796
            [MEASURE_NAME] => шт
            [CALLBACK_FUNC] =>
            [ORDER_CALLBACK_FUNC] =>
            [CANCEL_CALLBACK_FUNC] =>
            [PAY_CALLBACK_FUNC] =>
            [RECOMMENDATION] =>
            [SORT] => 100
        )

)
мне нужно передать PRODUCT_ID в другой запрос
Код:
    $dbProductPrice = CPrice::GetList(
        array("PRODUCT_ID" => "ASC"),
        array("PRODUCT_ID" => $id_tovara),
        false,
        false,
        array("ID", "PRODUCT_ID", "CATALOG_GROUP_ID", "PRICE", "CURRENCY", "GROUP_BUY")
    );
и в нем я вижу
Код:
Array
(
    [0] => Array
        (
            [ID] => 12778
            [PRODUCT_ID] => 5989
            [CATALOG_GROUP_ID] => 2
            [PRICE] => 1485.00
            [CURRENCY] => RUB
        )

    [1] => Array
        (
            [ID] => 12777
            [PRODUCT_ID] => 5989
            [CATALOG_GROUP_ID] => 3
            [PRICE] => 2600.00
            [CURRENCY] => RUB
        )

    [2] => Array
        (
            [ID] => 17077
            [PRODUCT_ID] => 5989
            [CATALOG_GROUP_ID] => 6
            [PRICE] => 1290.00
            [CURRENCY] => RUB
        )

    [3] => Array
        (
            [ID] => 25345
            [PRODUCT_ID] => 5989
            [CATALOG_GROUP_ID] => 8
            [PRICE] => 1485.00
            [CURRENCY] => RUB
        )
вот мне при определенных условиях нужно взять поле price из второго запроса и поместить в первый.
зная только product_id
 
Чот не осилил. Напишите проще, что и где найти надо. Я правильно понимаю, что из корзины надо получить массив, где ключ элемента - это ID, а значение элемента - PRODUCT_ID, а потом этот массив уже передадите куда надо?
 
Да, именно так.
product_id передать в другой запрос, и там уже получить второй массив где product_id владелец значений.
 
PHP:
$basket_id = array_column($inBasket, 'PRODUCT_ID', 'ID');
print_r($basket_id);
Первый массив такой должен быть?
 
В точку, вот так
Код:
    $basket_id = array_column($inBasket, 'PRICE', 'PRODUCT_ID');

  
    echo '<pre>';  
    print_r($basket_id);
    echo '</pre>';

Код:
Array
(
    [19639] => 380.0000
    [5989] => 1485.0000
)
Большое спасибо. Еще вопрос
А каким образом передать теперь
19639 в

Код:
    $dbProductPrice = CPrice::GetList(
        array("PRODUCT_ID" => "ASC"),
        array("PRODUCT_ID" => вот сюда),
        false,
        false,
        array("ID", "PRODUCT_ID", "CATALOG_GROUP_ID", "PRICE", "CURRENCY", "GROUP_BUY")
    );

}
 
Последнее редактирование:
Назад
Сверху