В моем цикле у меня только один результат.
Результат массива:
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'];
}
}
@NurMuhammad: count ($ this-> products) = 3
если вы перебираете массив с тремя значениями и получаете обратно только одно, это означает, что что-то нарушает ваш цикл и ваш скрипт, вероятно, потерпел крах. проверьте свои журналы и / или включите отчеты об ошибках.
Возможно, у вас нет товаров с такими идентификаторами?
У меня нет ошибок, и ID правильный
Похоже, что 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, я знаю, что ты сделал count($this->products)
. Это было незадолго до цикла? Если нет, попробуйте сделать count
непосредственно перед петлей. Похоже, ваш $this->products
чем-то перекрыт.
Я вставил выше функцию.
Окей круто. Другой момент, правильное ли условие в вашем sql? «Где p.products_id =: products_id и p.products_id = pd.products_id`? Мне это кажется одинаковым.
нет, это правильно, потому что после $ QProducts-> bindInt (': products_id', $ key); -: products_id принимает значение $ key.
@mike Я отредактировал свой ответ. Пожалуйста, взгляните. Спасибо.
$ Products: какое значение, оно не инициализировано?
@mike Вот почему я упомянул в комментариях чуть выше этой строчки. Это должно быть правильное имя объекта / параметра.
Попробовать показать количество массивов с
count($this->products)
?