#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);