我试图用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>";
}
主数组的第一层包含子数组项和非子数组项。第二个循环对非数组项不起作用。因此,您的代码应该是:
foreach($cart_contentz as $itemz => $valuez) {
if (is_array($valuez)) {
foreach($valuez as $key1 => $value1) {
echo "$key1: $value1<br>";
}
} else {
echo "$itemz: $valuez<br>";
}
}
您需要将该数组加载到您的$_SESSOIN['cart_contents']中,这可能已经完成了。其次,你的内部foreach作用于那个不是数组的数组的值。我很确定是你内心的恐惧造成了你的痛苦。此外,您的Array可能只是为了说明$_SESSION['cart_contents']中的内容,但是在键周围添加引号而不是方括号将使其更统一,更易于阅读。
更新:
看到重新格式化的代码后,感谢@ agentriddrum,现在我可以更清楚地看到这个问题。尝试在内部foreach周围添加if(is_array($valuez))
可能使用递归:
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);