foreach и запросы к базе(совсем новичок)

132
26 апреля 2019, 15:30

Пытаюсь сделать выгрузку товаров из корзины магазина с помощью PHPExcel

 $export_cart_products = $_SESSION['cart']['products'];
    foreach ($export_cart_products as $key => $row) {
        $phpexcel->getActiveSheet()->setCellValue("A$i", $row['product_id']);
        $string = $row['product'];
        $phpexcel->getActiveSheet()->setCellValueExplicit("B$i", $string, PHPExcel_Cell_DataType::TYPE_STRING);
        $phpexcel->getActiveSheet()->setCellValue("C$i", $row['price']);
        $phpexcel->getActiveSheet()->setCellValue("D$i", $row['amount']);
        $result_array = array();

        foreach ($row['product_options'] as $option_id => $variant_id) {
           $option_name = db_get_fields("SELECT option_name FROM ?:product_options_descriptions WHERE option_id = ?i", $option_id, $variant_id, CART_LANGUAGE);
           $variant_name = db_get_fields("SELECT variant_name FROM ?:product_option_variants_descriptions WHERE variant_id = ?i", $variant_id, $option_id, CART_LANGUAGE);
        };

__ плейсхолдеры ?: заменяются на значение cscart_

во втором foreach пытаюсь вывести опции товара, опции приходят в виде массива

array = [4] => 34, [3] => 12

каждый ключ и каждое значение это название "цвет", "размер", "XXL(большой размер)", "Синий", "Красный" и т.д. соответственно нужен запрос к базе, чтобы их вывести(подозреваю, что мой запрос к базе не совсем корректный). Сейчас получается только вариант с одной парой "Цвет: Синий" или "размер: XL", но у товара несколько таких значений(цвет, размер...).

Как сделать так, чтобы он выводил все опции товара.

Совсем запутался, а проект надо делать. xls корректно сохраняется, только без опций, а опции нужны.

Answer 1
foreach ($row['product_options'] as $option_id => $variant_id) {
       $option_name = db_get_fields("SELECT option_name FROM ?:product_options_descriptions WHERE option_id = ?i", $option_id, $variant_id, CART_LANGUAGE);
       $variant_name = db_get_fields("SELECT variant_name FROM ?:product_option_variants_descriptions WHERE variant_id = ?i", $variant_id, $option_id, CART_LANGUAGE);
    };

Здесь в цикле перезаписыватся значения и будет получено только одно на выходе, как ни крути.

Должен сохраняться массив, если нужен массив. Например так:

       foreach ($row['product_options'] as $option_id => $variant_id) {
       $option_name[] = db_get_fields("SELECT option_name FROM ?:product_options_descriptions WHERE option_id = ?i", $option_id, $variant_id, CART_LANGUAGE);
       $variant_name[] = db_get_fields("SELECT variant_name FROM ?:product_option_variants_descriptions WHERE variant_id = ?i", $variant_id, $option_id, CART_LANGUAGE);
    };

Но может быть лучше использовать ассоциативный массив с foreach для записи значений или цикл for с индексами с массивом.

Вот пример с ассоциативным:

       foreach ($row['product_options'] as $option_id => $variant_id) {
       $option_name = db_get_fields("SELECT option_name FROM ?:product_options_descriptions WHERE option_id = ?i", $option_id, $variant_id, CART_LANGUAGE);
       $variant_name = db_get_fields("SELECT variant_name FROM ?:product_option_variants_descriptions WHERE variant_id = ?i", $variant_id, $option_id, CART_LANGUAGE);
     $options[] = ['option_name' => $option_name, 'variant_name' => $variant_name];
    };

Тут в зависимости как нужно дальше обрабатывать массив.

READ ALSO
Для чего нужны template template parameters?

Для чего нужны template template parameters?

Для чего нужны template template parameters в шаблонных классах и функциях, ведь можно передавать им аргументы, которые являются шаблонами, с помощью обычных...

153
Как настроить виджеты объекта класса

Как настроить виджеты объекта класса

У меня есть класс, у него два объекта: window2, window3Как настроить виджеты (установить параметры кнопок, например) именно в window3 не зависимо от window2?

151
fstream c++ keylogger

fstream c++ keylogger

Есть зацикленная функция, которая записывает нажатия клавиши в txt файл

312