-1

可能重复:
遍历包含在父 stdClass Obj 中的 stdClass obj。(又名:遍历子对象)

...因为如果父对象为空,则会foreach显示错误。for()将是我首选的循环逻辑,但我不知道如何访问子对象属性。

工作代码:

foreach ($main_object as $object) {
    $object->value = $object->value * 3.14;
}

但是$main_object为空或空时,会foreach转储出错误。

我正在寻找更像这样的东西:

(伪)代码:

for ($p = 0; $p < counter($main_object); $p++) {
    //$p being the index'd id of the child object. That is where I'm having issues, how do I refer to child X within a parent object.
    $main_object->$p->value = $main_object->$p->value * 3.14;
}

现在,如果'$main_object' 为空/null,则不会引发错误,逻辑会继续运行。

$x->properties当对象是父对象内的一组子对象之一时,如何访问子对象?

4

3 回答 3

1

在迭代之前首先检查对象是否包含至少一个项目:

if($a && count($a)){
    // iterate using foreach
}

我也觉得这很烦人,但foreach使用起来非常容易,所以需要权衡取舍。我仍然宁愿做上面的事情而不是使用类似的东西for(这也可以工作)。

PHP 计数文档

干杯

于 2013-01-04T20:08:33.173 回答
0

您可以使用get_class_varswhich 在数组中返回类的所有属性。然后用for循环遍历。您可以使用数组键和对象访问它们:

$aryAttr = get_class_vars($main_object);
for ($p = 0; $p < count($aryAttr); $p++) {
    $key=key($aryAttr);
    $main_object->$key>value = $main_object->$key->value *3.14;
    next($aryAttr);
}

这可能会有所帮助,但没有测试它。

于 2013-01-04T20:07:10.057 回答
0

为什么不在执行 foreach 循环之前检查 main_object 是否为空

if($main_object->child != null)
{
  foreach ($main_object->child as $object)
 {
    $object->value = $object->value * 3.14;
 }
}
于 2013-01-04T20:10:21.913 回答