foreach 循环不会遍历所有 1 或 2 个元素

如果数组中有一个或两个元素,则 foreach 循环不会按预期工作。


$min = INF;

$max = -INF;


foreach ($mainResponse['chart'] as $elem) {

  if ($elem['soldPrice'] > $max) {

      $max = $elem['soldPrice'];

      $maxDate = $elem['dateSold'];

  } elseif ($elem['soldPrice'] < $min) {

      $min = $elem['soldPrice'];

      $minDate = $elem['dateSold'];

  }

}

这是数组的示例。


"chart":[{"soldPrice":780,"dateSold":"08\/30\/2020"},{"soldPrice":999.99,"dateSold":"08\/30\/2020"}]

当我尝试处理这个问题时,什么也没有出现。为什么 foreach 循环不循环遍历它?


这就是我会得到的...


"minDate":null,"maxDate":"08\/30\/2020","maxPrice":"999.99","minPrice":"inf"

对于这两个,我希望它能够确定正确的最小/最大以及日期。如果有 3 个或更多,则效果很好。


holdtom
浏览 60回答 1
1回答

阿波罗的战车

问题在于,在任何情况下,soldPrice&nbsp;始终大于&nbsp;$max。因此,在循环的每次迭代中,它将始终进入第一个&nbsp;if&nbsp;块,而永远不会进入&nbsp;elseif&nbsp;块,因此只会覆盖&nbsp;$max&nbsp;和&nbsp;$maxPrice&nbsp;每次。它与数组中的 3 个项目一起使用的事实可能只是巧合 - 您没有显示示例,但似乎可以肯定最后一个项目的 sellPrice 较低。您可以通过更改来轻松解决此问题elseif&nbsp;($elem['soldPrice']&nbsp;<&nbsp;$min)&nbsp;{到if&nbsp;($elem['soldPrice']&nbsp;<&nbsp;$min)&nbsp;{演示:http://sandbox.onlinephpfunctions.com/code/aaeb71e0d95ecf4065d9c1a6fb99e9fb241eca9e带有额外数据项的第二个演示,以更有效地展示它:
打开App,查看更多内容
随时随地看视频慕课网APP