php循环遍历数组 - 输出数组值和键

时间:2013-12-05 15:27:43

标签: php arrays loops multidimensional-array foreach

我有以下数组结构,我必须保留,因为它是一个现有的网站:

$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 = ...它只能输出每个键的值,因为我不会总是知道每个键的数量和名称一个是?

3 个答案:

答案 0 :(得分:2)

在您的内部foreach循环中,密钥label_sizelabel_positionlabel_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 />';
    }
}

答案 1 :(得分:0)

为什么不打印$ key和$ value,这应该打印出你想要的内容:http://jp1.php.net/manual/de/control-structures.foreach.php

答案 2 :(得分:0)

您错误地访问$ _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 />';
}

... $ option是数组值不是数组本身。您可以通过回显$ key和$选项轻松验证这一点。当你尝试打印$ 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'];
}