php - 如果 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 个或更多,这可以正常工作。
解决方案
问题是在任何情况下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
推荐阅读
- r - R tidymodels 配方接近数字属性的零方差过滤器
- c# - C# 检查列表
为空 - stripe-payments - 如果帐户经过验证,您将无法通过 API 更改 `company[tax_id]`。条纹
- javascript - 在我的代码中需要 mongodb api mongoose 后,Visual Studio 代码中的错误
- optimization - Solidity gas 费用的最佳内存实践和优化
- mysql - Sequelize N:M ParentModel.setChilds(ChildArray) 不是函数(魔术方法?)
- c++ - std::cin 函数未按预期运行?
- pascal - Turbo Pascal 中的左右语句是否有对齐字符串?
- apache-kafka - Kafka Streams (KStream-Ktable) Join 部分加入
- elasticsearch - 创建弹性搜索查询以按类别显示随机 5 个问题