我有下面的数组结构,我必须保留它,因为它是一个现有的网站:
$label_options = array(
"label_size" => 'A4',
"label_position" => 'Top',
"label_qty" => 50
);
$ink_options = array(
"black" => 1,
"colour" => 0
);
$item = array(
"item_number" => 12546518,
"item_type" => 'Canon',
"item_label_options" => $label_options,
"item_ink_options" => $ink_options,
"item_qty" => 2,
"item_price" => 13.99,
"item_total" => 26.98,
"item_delivery" => 2.49
);
if (isset($_SESSION['cart'])) {
$_SESSION['cart'][$unique] = $item;
} else {
$_SESSION['cart'] = array($unique => $item);
}
我现在希望能够输出数组中的值和数组中的数组。我可以使用以下内容:
foreach ($_SESSION['cart'] as $unique => $item) {
print 'Item Number = '.$item['item_number'].'<br />';
print 'Qty = '.$item['item_qty'].'<br />';
print 'Price = '.$item['item_price'].'<br />';
foreach ($item['item_label_options'] as $key => $option) {
print $option['label_size'].'<br />';
print $option['label_position'].'<br />';
print $option['label_qty'].'<br />';
}
}
它成功地输出了第一个循环,但没有输出第二个循环——只输入了每个循环的第一个字母:
Item Number = 12546518
Qty = 1
Price = 7.99
A // should be A4
T // should be Top
5 // should be 50
还有一种方法,我可以循环并输出所有值,而不必实际写入'Item Number = ...
,它可以只输出每个键及其值,因为我不总是知道每个键的数量和名称?
在内部foreach
循环中,键label_size
、label_position
和label_qty
不存在。当一个键不存在时,我想它默认为0,结果只给你第一个字母。这将产生你想要的:
foreach ($_SESSION['cart'] as $unique => $item) {
print 'Item Number = '.$item['item_number'].'<br />';
print 'Qty = '.$item['item_qty'].'<br />';
print 'Price = '.$item['item_price'].'<br />';
foreach ($item['item_label_options'] as $key => $option) {
print $option.'<br />';
}
}
为什么不只打印$key和$value,这应该会打印您想要的内容:http://jp1.php.net/manual/de/control-structures.foreach.php
您错误地访问了$_SESSION['cart']中的$label_options数组。在内部
foreach ($item['item_label_options'] as $key => $option) {
print $option['label_size'].'<br />';
print $option['label_position'].'<br />';
print $option['label_qty'].'<br />';
}
$选项是数组值,而不是数组本身。您可以通过回显$key和$option来轻松验证这一点。当您尝试打印$option['label_qty']PHP本质上将字符串视为数组,并为您提供第一个字母。
您可以使用以下密钥访问项目:
foreach ($_SESSION['cart'] as $unique => $item) {
echo 'Item Number = '.$item['item_number'].'<br />';
echo 'Qty = '.$item['item_qty'].'<br />';
echo 'Price = '.$item['item_price'].'<br />';
echo $item['item_label_options']['label_size'];
echo $item['item_label_options']['label_position'];
echo $item['item_label_options']['label_qty'];
}