【问题标题】:Object iteration using for loop使用 for 循环的对象迭代
【发布时间】:2016-06-12 11:41:23
【问题描述】:

使用 foreach 进行对象迭代很容易:

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

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

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

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

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

【问题讨论】:

  • 是的,它会起作用,但为什么不自己尝试呢?
  • 来自 pastebin,galleryInfoContainer 的孩子具有私有访问标识符,您无法在课堂外访问它们。
  • @rjdown 谢谢你,但显然所有的例子都使用foreach,那里没有提到for
  • @kamalpal 也许,但我可以使用foreach 访问它,没有任何问题。

标签: php oop object for-loop


【解决方案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

【讨论】:

  • 啊哈,正是我想知道的。谢谢!
  • 我们为什么不首先收集count() 并将其存储在一个变量中,这样我们就不会在每次迭代时调用它? for( $i = 0, $c = count($keys); ... )
  • @dbf 是的,你是对的,我试图覆盖它一行,因为这只是一个例子
【解决方案2】:
for ($j=0; $j < count((array)$item->attributes); $j++) {
    echo $item->attributes[$j];
}

这是你的意思吗?您可以通过这种方式直接访问该对象,与上面相同,然后预先将其转换为计数。

【讨论】:

  • 为什么要将 $item->attributes 转换为数组?如果它还不是一个数组,它就不会神奇地变成一个数组。
猜你喜欢
  • 2017-02-08
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 2017-09-21
  • 2013-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多