Foreach无法正常工作,因为在数组中有多个数组和对象。
例如:
Array
(
[0] => modelItem Object
(
[name] => Name 1
[option] => Array
(
[0] => modelOption Object
(
[id] => 28383
[price] => 1.70
)
)
[quantity] => 2
)
[1] => modelItem Object
(
[name] => Name 2
[option] => Array
(
[0] => modelOption Object
(
[id] => 28398
[price] => 3.50
)
)
[quantity] => 2
)
[subtotal] => 10.40
[deliveryArea] => modelDeliveryArea Object
(
[postcode] => BL2
)
[delivery] => 1
)
我希望foreach仅在modelItem对象和modelItem对象上循环,如何才能完成?
我试过这样做:
<?php
foreach ($items as $key => $item) {
echo $item->name;
foreach ($item->option as $o) {
echo $o->price;
}
}
?>
它工作正常,但我也收到错误:
Warning: Invalid argument supplied for foreach()
这是因为我认为subtotal
,deliveryArea
。
编辑:抱歉,修复了循环代码 - 忘了添加{}
答案 0 :(得分:2)
好的,你的代码不起作用的原因是因为你正在混合你的数组类型。这意味着如果你总是希望$item
成为一个班级,你就会遇到问题。 IF 你可以,我建议重组你的数组,这样你的modelItem
对象就可以自己放在一个数组中,以便让生活更轻松。
如果你不能......试试这个:
<?php
if (is_array($items)) {
foreach ($items as $key => $item) {
if(is_a($item, 'modelItem')) {
echo $item->name;
foreach ($item->option as $o) {
echo $o->price;
}
}
}
}
作为旁注is_a()
在PHP 5.0 - 5.2中已弃用,现在在php 5.3中未被推荐。如果您使用的是PHP 5.0 - 5.2,请参阅yoshi的示例。
答案 1 :(得分:2)
尝试:
<?php
foreach ($items as $key => $item) {
if ($item instanceof modelItem) {
echo $item->name;
if (isset($item->option) && is_array($item->option)) {
foreach ($item->option as $o) {
echo $o->price;
}
}
}
}
答案 2 :(得分:0)
在这样的数组中,我建议像这样检查:
if(isset($someVar))
{
}
或在您的情况下检查is_array是否像这样:
如果(is_array($东西)) {
}
您无法在案例subtotal
,deliveryArea
我希望它有所帮助!