迭代数组计算得分会返回零除

时间:2017-04-24 21:40:10

标签: php arrays for-loop

我想在视图中使用正确的数据,但我想在Controller中略微更改它,因此在视图中更容易呈现。

每个问题'将始终有6个答案(score)。每个score都是一个整数。

我想在每个问题的答案中执行的计算是:

所以在下面的例子中,在24 => array:1 [▼的答案数组中:

  1. 获取索引1的分数,并将其除以索引0中的分数。
  2. 获取索引3的分数,并将其除以索引2的分数。
  3. 获取索引5的分数,并将其除以索引4的分数。
  4. 因此,在三次迭代结束时,答案中将有3个值。然后它将转到25 => array:1 [▶]并执行与上述相同的操作。

    轻微的问题是除数可能为0,这将导致除以0错误。我试图通过循环中的if语句来缓解这种情况。

    高级数组($groupedQuestionsAudit)概述:

    array:7 [▼
      24 => array:1 [▼
        "answers" => array:6 [▼
          0 => ReAudit {#517 ▶}
          1 => ReAudit {#518 ▶}
          2 => ReAudit {#519 ▶}
          3 => ReAudit {#520 ▶}
          4 => ReAudit {#521 ▶}
          5 => ReAudit {#522 ▶}
        ]
      ]
      25 => array:1 [▶]
      26 => array:1 [▶]
      27 => array:1 [▶]
      29 => array:1 [▶]
      30 => array:1 [▶]
      31 => array:1 [▶]
    ]
    

    在数组中确认得分变量的部分:

    array:7 [▼
      24 => array:1 [▼
        "answers" => array:6 [▼
          0 => ReAudit {#517 ▼
            #original: array:9 [▼
              "id" => 337
              "score" => 8
              "created_at" => null
              "updated_at" => null
            ]
          }
          1 => ReAudit {#518 ▶}
    

    当前迭代:

    foreach ($groupedQuestionsAudit as $score) {
        foreach ($score as $value) {
            for ($i = 0; $i <= 3; $i++) {
                for ($o = 1; $o <= 4; $o++) {
                    if ($value[$o]->score == 0) {
                        $answers['answers'][] = 0;
                    } else {
                        $answers['answers'][] = $value[$o]->score / $value[$i]->score;
                    }
                }
            }
        }
    }
    

    我对上面的想法是循环遍历每个问题,并使用一个额外的for循环,它比前一个循环开始1个索引。然后我可以执行index 1's score / index 0's score的计算。我不认为这是正常的,好像我暂时删除除以0检查,它返回112结果(不在各自的问题数组中),如下所示:

    array:1 [▼
      "answers" => array:112 [▼
        0 => 0
        1 => 1.5
        2 => 1
        3 => 1.5
        4 => 0
        5 => 0
        6 => 0
        7 => 0
    

    错误本身是:

      

    Controller.php第356行中的ErrorException:除以零   在$answers['answers'][] = $value[$o]->score / $value[$i]->score;

    我不确定为什么我将除数除以0,如果除数为零,我忽略计算。

    非常感谢。

1 个答案:

答案 0 :(得分:0)

可以简化一下。您只需要在主循环中嵌套一个循环。您只需添加一个即可得到分子的索引。

foreach ($groupedQuestionsAudit as $key => $scores) {
    for ($i=0; $i < 6; $i += 2) {
        $divisor = $scores['answers'][$i]->score;
        $numerator = $scores['answers'][$i+1]->score;
        $answers[] = $divisor ? $numerator / $divisor : 0;

        // or $answers[$key][] = $divisor ? $numerator / $divisor : 0;
        // to group the results by the key from $groupedQuestionsAudit

    }
}

我使用三元计算:$answers[] = $divisor ? $numerator / $divisor : 0;。这是可能的,因为0将评估为false,而任何其他数字都会被评估为