首页 > 解决方案 > 迭代数组并返回最大值 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"],
            ]);
        }
    }
}

标签: phparrays

解决方案


这是修改后的代码

$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"];
        }
    }
}

做了以下改动

  1. 为每个父迭代添加了 $max 变量,该变量设置为 ' ',这样子循环的每次第一次迭代都将始终为 true,因为('' < '<any proper date>')返回 true,它将 $max 值设置为适当的日期,并将始终以最大值更新 $max 值日期。
  2. 而不是将数组推送到 $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
        )

)

推荐阅读