【发布时间】:2014-06-11 09:07:08
【问题描述】:
任何人都可以展示使用Doctrine\Common\Collections\ArrayCollection 的forAll 方法的示例吗?
【问题讨论】:
标签: symfony doctrine-orm doctrine
任何人都可以展示使用Doctrine\Common\Collections\ArrayCollection 的forAll 方法的示例吗?
【问题讨论】:
标签: symfony doctrine-orm doctrine
这很简单。您链接到的类以下列方式实现forAll 方法:
foreach ($this->_elements as $key => $element) {
if ( ! $p($key, $element)) {
return false;
}
}
因此,基于此,您应该调用forAll,例如:
$collection = ... #some data
$collection->forAll(function($key, $item){
// Your logic here, based on $key and $item
});
希望对您有所帮助....
Student 的对象,它有一个 OneToMany 到学生的分数。您想检查学生是否通过了所有他/她选择的科目
$student = ....
$allPassed = $student->getMarks()->forAll(function($key, $mark){
return $mark->getValue() != 'F';
});
如果所有标记都是“A”、“B”、“C”或“D”,$allPassed 将保留 TRUE。即使其中之一是F,如果将是FALSE。
【讨论】:
$key 和$element 参数是如何传递给闭包的,但现在我明白了。谢谢!
我想强调一下,一旦内部函数返回 false,forAll 方法就会退出。
以 Perovic 为例,假设 $student 有 10 分,其中只有一个是“F”。
如果“F”标记是数组的第 10 个元素,则函数
$mark->getValue()
将被调用 10 次。
另一方面,如果 'F' 标记是数组的第一个元素,$mark->getValue() 将只被调用一次,因为该函数立即返回 false,并且 forAll 方法停止计算。
【讨论】:
returns a falsey value,因为它会在值为0, false, null, ""时退出,实际来源可以在接受的答案中看到。结果:3v4l.org/4g6DJ所以实际上该方法可以认为是testAll()