使用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。
答案 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。