使用for循环的对象迭代

时间:2016-06-12 11:41:24

标签: php oop object for-loop

使用foreach进行对象迭代非常简单:

foreach ($item->attributes as $attribute) {
// echo $attribute->name;
}

..但我想知道是否可以用for代替它:

for ($j=0; $j < count($item->attributes); $j++) {
// echo $item->attributes->$j->$name ?
}

虽然我可以在foreach之外创建一个计数器并增加它,但只是想知道是否适用于对象。

作为参考,我使用的对象看起来像this

2 个答案:

答案 0 :(得分:1)

for循环适用于具有递增或递减数字索引的数组,对于关联数组,您必须使用foreach,除非您有单独的键数组,例如:

$count = count($keys);
for($i=0; $i < $count; $i++) {
    echo $arr[$keys[$i]];
}

或者您可以使用array_values

重新索引关联数组
$arr = array_values($assoc_array);
$count = count($arr);
for($i=0; $i < $count; $i++) {
    echo $arr[$i];
}

对于对象,它们是属性,不能从数字开始,因此您必须将对象转换为数组并重新索引键。

$arr = array_values(json_decode(json_encode($object), true));
$count = count($arr);
for($i=0; $i < $count; $i++) {
    echo $arr[$i];
}

尽量避免使用上述内容并改为使用foreach

答案 1 :(得分:-1)

for ($j=0; $j < count((array)$item->attributes); $j++) {
    echo $item->attributes[$j];
}
这是什么意思?您可以直接访问此对象,与上面相同,然后事先将其转换为count。