微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

查找具有最小和最大列值的条目并打印多个值

如何解决查找具有最小和最大列值的条目并打印多个值

我想根据我得到的最小值和最大值来获取“created-at”数据。我有一个类似这样的 JSON。

{
    "channel": {
        "id": "xxxxxxx","field1": "A","created_at": "2021-06-16T19:06:15+07:00","updated_at": "2021-06-16T19:09:58+07:00","last_entry_id": 459
    },"Feeds": [
        {
            "created_at": "2021-06-19T07:00:11+07:00","entry_id": 1,"field1": "26.51"
        },{
            "created_at": "2021-06-19T07:00:26+07:00","entry_id": 2,"field1": "26.78"
        },{
            "created_at": "2021-06-19T07:00:56+07:00","entry_id": 3,"field1": "26.81"
        }
    ]
}

这是我的代码

$url = 'https://zzz';

$sumber = file_get_contents($url);
$z = json_decode($sumber);

print_r($z);
echo '<br><br>';

$length = count($z->Feeds);

$val1 = array();

for ($i = 0; $i < $length; $i++) {
    $val1[] = round($z->Feeds[$i]->field1,2);
}       

$min1 = min($val1);
$max1 = max($val1);

echo "max : ". $max1 ." - min: ". $min1.'<br>';

我上面代码的结果是这样的max : 26.81 - min: 26.51

,但我想要这样的结果 max : 26.81 2021-06-19T07:00:56+07:00 - min: 26.51 2021-06-19T07:00:11+07:00

有人可以帮我吗?

解决方法

field1 列对提要数组进行排序,然后(假设提要数组中至少有 1 个条目并且不考虑“关系”)访问第一个和最后一个条目。

使用 printf() 可以清晰地显示数据,而不会出现混乱的串联。

代码:(Demo)

$feeds = json_decode($json,true)['feeds'];

usort($feeds,function($a,$b) {
    return $b['field1'] <=> $a['field1'];
});

$last = array_slice($feeds,-1)[0];

printf(
    'max : %.2f %s - min: %.2f %s',round($feeds[0]['field1'],2),$feeds[0]['created_at'],round($last['field1'],$last['created_at']
);

输出:

max : 26.81 2021-06-19T07:00:56+07:00 - min: 26.51 2021-06-19T07:00:11+07:00

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。