简体   繁体   中英

php loop through array within array - output array value and key

I have the following array structure in place that i have to keep as it's an existing website:

$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);
}

I now want to be able to output the values inside the arrays and the arrays inside the array. I can use the below:

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 />';
    }
}

which successfully outputs the first loop but not the second - just putting the first letter of each:

Item Number = 12546518
Qty = 1
Price = 7.99

A // should be A4
T // should be Top
5 // should be 50

Also is there a way i can loop and output all the values without having to actually write 'Item Number = ... it can just output each key with its value as i won't always know how many and what the names of each one are?

In your inner foreach loop, the keys label_size , label_position and label_qty don't exist. When a key doesn't exist, I guess it's defaulting to 0 and as a result just gives you the first letter. This will produce what you want:

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

You are incorrectly accessing the $label_options array within $_SESSION['cart']. Within...

foreach ($item['item_label_options'] as $key => $option) {
   print $option['label_size'].'<br />';
   print $option['label_position'].'<br />';
   print $option['label_qty'].'<br />';
}

...$option is the array value , and not an array itself . You can easily verify this by echoing $key and $option. When you try and print $option['label_qty'] PHP essentially treats the string like an array, giving you the first letter.

You can access the items by key using:

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'];
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM