Массив PHP (только один результат)

В моем цикле у меня только один результат.

Результат массива:

   array(3) {
    [3]=>
    array(1) {
         ["qty"]=> int(2)
       }
    [1]=>
    array(1) {
        ["qty"]=> int(3)
       }
    [2]=>
      array(1) {
        ["qty"]=> int(4)
      }
    }

Если я напишу это внутри цикла, он отобразит только один результат:

var_dump('Key=' . $key .' - Value=' . $value['qty']);

Моя петля:

foreach ($this->products as $key => $value) {

        $QProducts = $this->db->prepare('select p.products_id,
                                                pd.products_name,
                                                p.products_model
                                          from :table_products p,
                                               :table_products_description pd
                                          where p.products_id = :products_id
                                          and p.products_id = pd.products_id
                                        ');

        $QProducts->bindInt(':products_id', $key);
        $QProducts->execute();

        echo $QProducts->value('products_name');
}

Как я могу решить эту проблему?

Ниже основной элемент функции. Это может вам помочь.

public function OrderProduts() {
          $prod_array = $this->orderResult['Cart']['contents'];

          foreach ($prod_array as $key => $value) {
            $QProducts = $this->db->prepare('select p.products_id,
                                                    pd.products_name
                                              from :table_products p,
                                                   :table_products_description pd
                                              where p.products_id = :products_id
                                              and p.products_id = pd.products_id
                                            ');

            $QProducts->bindInt(':products_id', $key);
            $QProducts->execute();

            echo $Products->value('products_name);
            echo $value ['qty'];
          }
       }

Попробовать показать количество массивов с count($this->products)?

Nur Muhammad 10.09.2018 03:12

@NurMuhammad: count ($ this-> products) = 3

mike 10.09.2018 05:24

если вы перебираете массив с тремя значениями и получаете обратно только одно, это означает, что что-то нарушает ваш цикл и ваш скрипт, вероятно, потерпел крах. проверьте свои журналы и / или включите отчеты об ошибках.

billynoah 10.09.2018 06:36

Возможно, у вас нет товаров с такими идентификаторами?

Nimeshka Srimal 10.09.2018 06:38

У меня нет ошибок, и ID правильный

mike 10.09.2018 17:07
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
5
91
1

Ответы 1

Похоже, что products работает как нечто вроде передачи по ссылке. Попробуйте присвоить products переменной,

$prodArray = $this->products

и перебирать переменную ($prodArray) вместо $this->products.

Отладка

Назначьте product на каждой итерации временному массиву ($productsArrayTemp) следующим образом.

$productsArrayTemp = array(); //a temporary array.   
public function OrderProduts() {
    $prod_array = $this->orderResult['Cart']['contents'];

    foreach ($prod_array as $key => $value) {
        $QProducts = $this->db->prepare('select p.products_id,
                                            pd.products_name
                                      from :table_products p,
                                           :table_products_description pd
                                      where p.products_id = :products_id
                                      and p.products_id = pd.products_id
                                    ');

        $QProducts->bindInt(':products_id', $key);
        $QProducts->execute();

        //I am not too sure about the name of the object. 
        //But you need to push each and every object to an array.
        $this->productsArrayTemp[] = $Products;

  }
}

Затем попробуйте подсчитать этот массив,

count($this->productsArrayTemp)

Если эти результаты принесут ожидаемое количество результатов, то вы можете использовать этот массив (вместо $this->products) для доступа к его подобъектам.

Причина этого заключается в том, чтобы исключить тот факт, что $this->products переопределяется где-то в вашем коде.

Надеюсь, это поможет.

tk, но всегда принимает одно значение: string (15) "Key = 3 - Value = 2"

mike 10.09.2018 17:07

Привет, @mike, я знаю, что ты сделал count($this->products). Это было незадолго до цикла? Если нет, попробуйте сделать count непосредственно перед петлей. Похоже, ваш $this->products чем-то перекрыт.

Anjana Silva 10.09.2018 17:26

Я вставил выше функцию.

mike 10.09.2018 18:20

Окей круто. Другой момент, правильное ли условие в вашем sql? «Где p.products_id =: products_id и p.products_id = pd.products_id`? Мне это кажется одинаковым.

Anjana Silva 10.09.2018 18:29

нет, это правильно, потому что после $ QProducts-> bindInt (': products_id', $ key); -: products_id принимает значение $ key.

mike 10.09.2018 18:43

@mike Я отредактировал свой ответ. Пожалуйста, взгляните. Спасибо.

Anjana Silva 11.09.2018 10:19

$ Products: какое значение, оно не инициализировано?

mike 11.09.2018 15:40

@mike Вот почему я упомянул в комментариях чуть выше этой строчки. Это должно быть правильное имя объекта / параметра.

Anjana Silva 11.09.2018 15:51

Другие вопросы по теме