PHP недопустимый аргумент, предоставленный в foreach

#php

#php

Вопрос:

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

 Array ( 
  [regenerated] => 1302668837 
  [id] => 2 
  [qty] => 1 
  [price] => 1200 
  [name] => support 
  [optione] => 
  [cart_contents] => Array ( 
                      [c4ca4238a0b923820dcc509a6f75849b] => Array ( 
                                                             [rowid] => c4ca4238a0b923820dcc509a6f75849b 
                                                             [id] => 1 
                                                             [qty] => 1 
                                                             [price] => 29.95 
                                                             [name] => Training DVD 
                                                             [optione] => 
                                                             [subtotal] => 29.95 
                                                           ) 
                      [c81e728d9d4c2f636f067f89cc14862c] => Array ( 
                                                             [rowid] => c81e728d9d4c2f636f067f89cc14862c 
                                                             [id] => 2 
                                                             [qty] => 1 
                                                             [price] => 1200 
                                                             [name] => support 
                                                             [optione] => 
                                                             [subtotal] => 1200 
                                                           ) 
                      [total_items] => 2 
                      [cart_total] => 1229.95 
                    ) 
  [johndoe] => audio 
  [totalItems] => 2 
) 

$cart_contentz = $_SESSION['cart_contents'];

foreach($cart_contentz as $itemz => $valuez) {

    foreach($valuez as $key1 => $value1) {

echo "$key1: $value1<br>"; 
}
  

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

1. Мы видим массив, но не видим, что вы пробовали до сих пор.

2. total_items и cart_total не имеют массивов в качестве значений. Таким образом, $valuez в этих случаях получается число, а не массив.

Ответ №1:

на первом уровне вашего основного массива есть элементы, которые являются подмассивами, а некоторые — нет. Ваш второй цикл не работает с элементами, отличными от массива. Таким образом, ваш код должен быть:

 foreach($cart_contentz as $itemz => $valuez) {
  if (is_array($valuez)) {
    foreach($valuez as $key1 => $value1) {
      echo "$key1: $value1<br>"; 
    }
  } else {
    echo "$itemz: $valuez<br>"; 
  }
}
  

Ответ №2:

вам нужно будет загрузить этот массив в ваш $_SESSOIN[‘cart_contents’], что, возможно, уже было сделано. во-вторых, ваш внутренний foreach воздействует на значения этого массива, которые не являются массивами. Я совершенно уверен, что причиной ваших проблем является внутренний foreach. Кроме того, ваш массив может быть просто для иллюстрации того, что находится в $_SESSION[‘cart_contents’] , но добавление кавычек вместо квадратных скобок вокруг ключей сделает его более единообразным и удобным для чтения.

Обновить:

после просмотра переформатированного кода, спасибо @AgentConundrum, теперь я могу более четко видеть проблему. Попробуйте добавить if(is_array($valuez)) вокруг вашего внутреннего foreach .

Ответ №3:

Возможно, использовать рекурсию:

  function printArray($array, $parent=false, $level=0) {
   if (!($parent === false)) echo "<b>".str_pad('',($level-1)*4,"-")."[$parent] =></b><br />n";
   foreach ($array as $key=>$value) {
     if (!is_array($value)) echo str_pad('',$level*4,"-")."[$key] => $value<br />n";
     else printArray($value, $key, $level 1);
     }
   }

 print_array($your_array);