Как найти конкретное значение в многомерном массиве $ _SESSION?

Я использую массив $_SESSION для хранения описания товара, количества и цены для предметов, размещенных в корзине покупок. Это все работает dandy, вот начальная часть кода:

 $quantity = 1; // add first item from shop page if(isset($_POST['add_item']) && (!isset($_SESSION['cart']))) { $_SESSION['cart'] = array(); $_SESSION['cart'][$_POST['product_description']] = array('quantity' => $quantity, 'price' => $_POST['product_price']); header("Location: http://website.com/cart.php"); } 

Это загружает массив $_SESSION['cart'] с соответствующей информацией, и когда я зацикливаю его на странице корзины, я получаю точное содержимое моей корзины. Все это работает по желанию.

Итак, теперь я хочу найти массив $_SESSION['cart'] чтобы определить, находится ли конкретный элемент в $_SESSION['cart'] , например «iPhone case – Black».

Я пробовал различные формы echo $_SESSION['cart']['product_description'] и ничего не получал. Когда я print_r массив, я получаю следующее:

 Array ( [iPhone case - Black] => Array ( [quantity] => 1 [price] => 9.49 ) ) 

Что правильно. Выполнение var_dump дает ожидаемый результат:

 array(1) { ["iPhone case - Black"]=> array(2) { ["quantity"]=> int(1) ["price"]=> string(4) "9.49" } 

}

Конечно, если есть лучший способ построить массив, я открыт для него.

Все, что я хочу сделать, это выяснить, есть ли «iPhone case – Black» в $_SESSION['cart'] и обслуживать соответствующий код на основе результата.

Я попытался, if (in_array('iPhone case - Black', $_SESSION['cart'])) который ничего не дает, и когда я расширяю его до if (in_array('iPhone case - Black', $_SESSION['cart'][0])) или ...[1] или ...['product_description'] Я получаю сообщение об ошибке:

Warning: in_array() expects parameter 2 to be array, null given in...

Что мне не хватает, что просто позволит мне проверить массив $_SESSION['cart'] чтобы найти значение «iPhone case – Black»? Мой единственный вариант – цикл foreach ?

Большое искреннее спасибо заранее!

ОБНОВЛЕНИЕ Копирование сообщений по запросу от @rmmoul:

 // add first item from shop page if(isset($_POST['add_item']) && (!isset($_SESSION['cart']))) { $_SESSION['cart'][] = array('product_description'=> $_POST['product_description'], 'quantity' => $quantity, 'price' => $_POST['product_price']); header("Location: http://website.com/cart.php"); } 

Возвращает это через print_r :

 Array ( [0] => Array ( [product_description] => iPhone case - Black [quantity] => 1 [price] => 9.49 ) [1] => Array ( [product_description] => iPhone case - Black [quantity] => 1 [price] => 9.49 ) ) 

поскольку вы используете $_POST['product_description'] качестве ключа, назначенное значение станет ключевым, то есть 'iPhone case - Black' .

попробуй это:

  if (isset($_SESSION['cart']['iPhone case - Black'])){ foreach($_SESSION['cart']['iPhone case - Black'] as $key=>$value){ echo $key." ".$value."<br>"; } 

Как насчет isset ?

 if ( isset( $_SESSION['cart']['iPhone case - Black'] ) ) 

Если это true тогда $_SESSION['cart']['iPhone case - Black'] будет содержать информацию:

 array(2) { ["quantity"]=> int(1) ["price"]=> string(4) "9.49" } 

Вы не добавляете значение в ключ под названием «product_description», вы называете ключ после описания вашего продукта. Попробуйте изменить эту строку:

  $_SESSION['cart'][$_POST['product_description']] = array('quantity' => $quantity, 'price' => $_POST['product_price']); 

Для того, чтобы:

  $_SESSION['cart'][] = array('product_description'=> $_POST['product_description'], 'quantity' => $quantity, 'price' => $_POST['product_price']); 

Затем вы сможете повторить такие значения, как:

 echo $_SESSION['cart'][0]['quantity']; echo $_SESSION['cart'][0]['price']; echo $_SESSION['cart'][0]['price']; 

Это также должно позволить вам иметь несколько продуктов легко, как $ _SESSION ['cart'] [0], $ _SESSION ['cart'] [1] и т. Д.

Затем вы можете пройти через массив корзины, чтобы проверить определенные элементы, например:

 foreach($_SESSION['cart'] as $product) { if($product['product_description'] == 'black iphone') { //do something here echo $product['price']; } } 

Это непроверено, хотя и написано по памяти, поэтому может потребоваться немного изменить его, чтобы запустить его, но у него есть суть того, что должно работать на вас.

Редактировать:

Я обновил foreach, чтобы быть более полезным.