foreach循环问题

时间:2011-05-05 09:02:44

标签: php foreach

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()

这是因为我认为subtotaldeliveryArea

编辑:抱歉,修复了循环代码 - 忘了添加{}

3 个答案:

答案 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($东西))    {

}

您无法在案例subtotaldeliveryArea

中循环播放字符串

我希望它有所帮助!