在不使用“foreach”的情况下遍历对象的子对象


Iterate through child objects of an object without the usage of `foreach`

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

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

工作ish代码:

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

但是$main_object为空或null时,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,则不会引发任何错误,逻辑将保持truckin状态。

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

只需在迭代前先检查对象是否至少包含一个项:

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

我也觉得这很烦人,但foreach非常容易使用,所以这有点折衷。我仍然宁愿做上面的事情,也不愿使用类似for的东西(它也可以工作(。

PHP计数文档

干杯

您可以使用get_class_vars,它返回数组中类的所有属性。然后使用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);
}

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

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

if($main_object->child != null)
{
  foreach ($main_object->child as $object)
 {
    $object->value = $object->value * 3.14;
 }
}
相关文章: