Почему этот массив выводит «array» вместо значения? (PHP)

#php #html #arrays #web

#php #HTML #массивы #веб

Вопрос:

Я изучаю PHP и делаю базовую корзину для покупок в электронной коммерции для практики. Я столкнулся с проблемой, которая поставила меня в тупик. Я создал массив для отображения текущего количества одного товара, который есть в корзине покупателя, но вместо отображения значения он отображает «array».

Ниже то, что я использую:

 <?php
if(isset($_SESSION['Cart'])){

    $sql="SELECT * FROM products where Product_ID IN (";

    foreach($_SESSION['Cart'] as $id => $value){

        $sql.=$id.",";
        }
        $sql=substr($sql, 0, -1).") ORDER BY Category ASC";
        $query=mysql_query($sql);
        while($row=mysql_fetch_array($query)){
        ?>
            <p><?php echo $row['Name']?> x <?php echo $_SESSION['Cart'][$row['Product_ID']['quantity']] ?></p>
        <?php
        }
}else{

    echo "<p>There are no products selected</p>";
}
?>
  

Я не уверен, что именно в этом заключается проблема. Остальная часть моего сайта находится здесь (Индекс) и здесь (страница продукта), если кто-нибудь будет так любезен, чтобы устранить неполадки со мной.

Комментарии:

1. Пожалуйста, не используйте mysql_* функции в новом коде . Они больше не поддерживаются и официально не рекомендуются . Видите красное поле ? Узнайте о подготовленных операторах вместо этого и используйте PDO или MySQLi эта статья поможет вам решить, что именно. Если вы выбираете PDO, вот хороший учебник .

2. @user3807604 Сделайте print_r() вместо echo переменной, которая выводит ‘Array’. чтобы увидеть структуру массива. вы бы знали, что делать дальше. Например: print_r($_SESSION['Cart'][$row['Product_ID']['quantity']])

3. Не забудьте поместить ключ в конец массива, например $arr[0] или $arr['quantity']

4. @Rybo111 При печати я получаю что-то вроде следующего: Массив Orange Juice x ( [количество] => 1 ) Название (Апельсиновый сок) отображается правильно, и оно подсчитывает количество, но оно по-прежнему отображается как массив Orange Juice x, если я переключу его обратно на echo из print. Почему он просто не отображает количество, за которым он следит?

5. Каким бы ни был ваш массив, вам нужно делать так, как сказал @RaymondAtivie и print_r это. Это даст вам ключ к ассоциированию значений. Затем вам нужно добавить ['key_here'] в конец переменной, которую вы пытаетесь отобразить.

Ответ №1:

Основываясь на ваших отзывах, если попытка print_r($_SESSION['Cart'][$row['Product_ID']['quantity']]['quantity]) даст вам Array ( [quantity] => 1 )

Затем вы можете выполнить echo $_SESSION['Cart'][$row['Product_ID']['quantity']]['quantity] , чтобы предоставить вам 1

Но я не думаю, что это было первоначальным намерением. я думаю, что ваша настоящая проблема заключается в том, что при присвоении значений массиву возможно несоответствие ключей.

Попробуйте приведенный выше код и дайте знать, поможет ли это

Ответ №2:

Я думаю, что есть проблема с этой строкой кода:

 $_SESSION['Cart'][$row['Product_ID']['quantity']]
  

Вы получаете значение из $_SESSION['Cart'] с размерным массивом $row там. Я думаю, что $row['Product_ID'] это не массив, а вместо этого string или int , поэтому вызов $row['Product_ID']['quantity'] является проблемой.