【问题标题】:How to use forAll method of Doctrine ArrayCollection?如何使用 Doctrine ArrayCollection 的 forAll 方法?
【发布时间】:2014-06-11 09:07:08
【问题描述】:

任何人都可以展示使用Doctrine\Common\Collections\ArrayCollectionforAll 方法的示例吗?

【问题讨论】:

    标签: symfony doctrine-orm doctrine


    【解决方案1】:

    这很简单。您链接到的类以下列方式实现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 参数是如何传递给闭包的,但现在我明白了。谢谢!
    【解决方案2】:

    我想强调一下,一旦内部函数返回 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()
    猜你喜欢
    • 2012-01-10
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 2012-04-22
    • 2021-04-22
    • 1970-01-01
    相关资源
    最近更新 更多