首页 > 解决方案 > 如果 1 或 2 个元素,foreach 循环不会遍历所有内容

问题描述

如果数组中有一个或两个元素,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 个或更多,这可以正常工作。

标签: php

解决方案


问题是在任何情况下soldPrice总是大于$max。因此,在循环的每次迭代中,它将始终进入第一个if块并且永远不会进入该elseif块,因此每次都会简单地覆盖$max和。$maxPrice

它与数组中的 3 个项目一起工作的事实可能只是巧合 - 您没有显示示例,但似乎可以肯定,最后一个项目中的 soldPrice 较低。

您可以通过更改来轻松解决此问题

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

if ($elem['soldPrice'] < $min) {

演示:http ://sandbox.onlinephpfunctions.com/code/aaeb71e0d95ecf4065d9c1a6fb99e9fb241eca9e

带有额外数据项的第二个演示,以更有效地显示它:http: //sandbox.onlinephpfunctions.com/code/fc326dd62f0fae31eec2126fb758283e23e60177


推荐阅读