【问题标题】:how iterate ArrayCollection in symfony2 Controller如何在 symfony2 控制器中迭代 ArrayCollection
【发布时间】:2014-09-04 14:24:35
【问题描述】:

我想在 Symfony2 控制器中迭代 ArrayCollection 实例,最简单的方法是什么?

编辑:

我认为它会像 php 中的普通数组一样工作,但我在这段代码中遇到错误:

foreach ($arrayCollectionInc as $Inc) {

}

【问题讨论】:

  • 您忘记包含您尝试过的内容
  • foreach($collection as $item){ ... }
  • 发生了什么错误? ArrayCollection 扩展 Collection 进而实现 IteratorAggregateArrayAccess ---> foreach 应该是可能的......
  • 那会是什么错误?
  • 嗯.. 我总是遇到一些错误,说需要数组,但我插入了 ArrayCollection.. 但现在它对我来说很好!!!!!

标签: php symfony doctrine-orm


【解决方案1】:

对于那些将来发现这个问题的人,我认为另一种方法比公认的答案更好,它只是将ArrayCollection 转换为数组。如果您只想转换为数组,为什么要首先使用ArrayCollection

您可以使用getIterator() 函数轻松循环ArrayCollection 而无需将其转换为数组。

foreach($arrayCollection->getIterator() as $i => $item) {
    //do things with $item
}

【讨论】:

  • 这应该被认为是最佳实践。
  • 为什么? ArrayCollection 实现了 IteratorAggregate。你应该只 foreach 数组集合
  • 我发现的一个区别是,如果你不使用 getIterator() 而你在循环中使用$arrayCollection->key(),你总是得到0。当然,您可以直接使用as $i => $item,而无需致电key(),您将获得您的钥匙。
【解决方案2】:

最简单的方法:

$arr = $arrayCollectionInc->toArray();

foreach ($arr as $Inc) {

}

工作示例:

$a = new ArrayCollection();
$a->add("value1");
$a->add("value2");

$arr = $a->toArray();

foreach ($arr as $a => $value) {
    echo $a . " : " . $value . "<br />";
}

结果:

0 : value1
1 : value2

【讨论】:

    【解决方案3】:

    绝对同意不应转换为数组,但是,-&gt;getIterator() 不是必需的。

    foreach($arrayCollection as $i => $item) {
        //do things with $item
    }
    

    【讨论】:

    • 已经成功地执行了类似 foreach($arrayCollection as $item) {// 使用 $item} 的操作,并且效果很好。是否存在我遗漏的性能差异,或者到目前为止我还没有遇到的错误?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 2011-12-09
    • 2013-12-11
    相关资源
    最近更新 更多