php - 迭代数组并返回最大值 php
问题描述
大家好,我有一个这样的数组:
Array
(
[0] => Array
(
[date_max] => 2019-12-15
[id_property] => 18
[last_validation] => 1
)
[1] => Array
(
[date_max] => 2020-08-31
[id_property] => 18
[last_validation] => 5
)
[2] => Array
(
[date_max] => 2019-12-15
[id_property] => 21
[last_validation] => 1
)
......
)
我想要做的是循环这个数组,对于每个id_property
我必须选择所有出现的最大日期并为每个返回一行id_property
例子 :
[0] => Array
(
[date_max] => 2019-12-15
[id_property] => 18
[last_validation] => 1
)
[1] => Array
(
[date_max] => 2020-08-31
[id_property] => 18
[last_validation] => 5
)
对于此示例,它应该返回第二次出现,因为 date_max 是上级。
到目前为止,我的代码我不知道为什么它不起作用:
$data = [];
foreach ($sql as $current_key => $current_array) {
foreach ($sql as $search_key => $search_array) {
if (
$current_array["id_property"] == $search_array["id_property"] &&
$current_array["date_max"] > $search_array["date_max"]
) {
array_push($data, [
$current_array["date_max"],
$current_array["id_property"],
$current_array["last_validation"],
]);
}
}
}
解决方案
这是修改后的代码
$data = [];
foreach ($arr as $current_key => $current_array) {
$max = '';
foreach ($arr as $search_key => $search_array) {
if (
$current_array["id_property"] == $search_array["id_property"] &&
$max < $search_array["date_max"]
) {
$data[$current_array["id_property"]] = [
$current_array["date_max"],
$current_array["id_property"],
$current_array["last_validation"],
];
$max = $search_array["date_max"];
}
}
}
做了以下改动
- 为每个父迭代添加了 $max 变量,该变量设置为 ' ',这样子循环的每次第一次迭代都将始终为 true,因为
('' < '<any proper date>')
返回 true,它将 $max 值设置为适当的日期,并将始终以最大值更新 $max 值日期。 - 而不是将数组推送到 $data 我将键值设置为 $current_array["id_property"] 以便它始终具有最新的最大记录。
输出如下。
Array
(
[18] => Array
(
[0] => 2020-08-31
[1] => 18
[2] => 1
)
[21] => Array
(
[0] => 2019-12-15
[1] => 21
[2] => 1
)
)
推荐阅读
- node.js - 如何在 ubuntu 中使用 apt-get 在我选择的存储库中安装 nodejs?
- mysql - 如何为给定键连接 4 个表(MYSQL)
- json - 如何解码 Json 多个
- vue.js - 这在 Quasar 项目和节点模块中无法访问。$q
- google-drive-api - 恢复由于上传过程中系统故障而丢失的 Google Drive File Stream 文件
- apache-spark - 如何在 Databricks dbfs 中列出文件键 **without** dbutils
- python - 添加输入的数字
- python - 我无法通过 Selenium ElementNotInteractableException:按钮无法滚动到视图中
- reactjs - 反应中的构建时间太长(10 分钟)
- javascript - 从一个 API 获取数据后,将完整响应连同修改后的键值对发送回其他 API