php - 一个键的 JSON 求和值,其中有多个具有相同名称的键 PHP

标签 php arrays json

我正在处理一些空气质量数据,其中每个结果至少包含 2 个结果。我知道我可以限制循环并仅从最后一个条目中获取数据,但是如果我实际上可以对相同键的值求和并将结果除以条目数,那将会非常好,这样我可以获得更多精确值。 enter image description here

我看到的一个问题是 P1 和 P2 的键值在同一个数组中,所以不知道如何分别对这两个键求和

两组 P1 和 P2 键值之间的差异来自数据的时间戳。

知道如何实现吗?

这是JSON数据

[{"sensor":{"sensor_type":{"name":"SDS011","manufacturer":"Nova Fitness","id":14},"pin":"1","id":19770},"sensordatavalues":[{"value_type":"P1","value":"250.80","id":6323692330},{"value_type":"P2","value":"68.70","id":6323692332}],"location":{"country":"BG","latitude":"41.9460","altitude":"229.5","longitude":"25.5380","id":10044},"sampling_rate":null,"timestamp":"2019-02-26 14:02:34","id":2977869281},{"sensor":{"sensor_type":{"name":"SDS011","manufacturer":"Nova Fitness","id":14},"pin":"1","id":19770},"sensordatavalues":[{"value_type":"P1","value":"106.87","id":6323721400},{"value_type":"P2","value":"34.80","id":6323721402}],"location":{"country":"BG","latitude":"41.9460","altitude":"229.5","longitude":"25.5380","id":10044},"sampling_rate":null,"timestamp":"2019-02-26 14:05:04","id":2977883059}]

最佳答案

这是一种方法,使用 2 个 foreach 循环和一些可变变量。

$json = '[{"sensor":{"sensor_type":{"name":"SDS011","manufacturer":"Nova Fitness","id":14},"pin":"1","id":19770},"sensordatavalues":[{"value_type":"P1","value":"250.80","id":6323692330},{"value_type":"P2","value":"68.70","id":6323692332}],"location":{"country":"BG","latitude":"41.9460","altitude":"229.5","longitude":"25.5380","id":10044},"sampling_rate":null,"timestamp":"2019-02-26 14:02:34","id":2977869281},{"sensor":{"sensor_type":{"name":"SDS011","manufacturer":"Nova Fitness","id":14},"pin":"1","id":19770},"sensordatavalues":[{"value_type":"P1","value":"106.87","id":6323721400},{"value_type":"P2","value":"34.80","id":6323721402}],"location":{"country":"BG","latitude":"41.9460","altitude":"229.5","longitude":"25.5380","id":10044},"sampling_rate":null,"timestamp":"2019-02-26 14:05:04","id":2977883059}]';
$array = json_decode($json);

$P1 = 0;
$P2 = 0;
$P1C = 0;
$P2C = 0;
foreach ($array as $arr) {
    foreach ($arr->sensordatavalues as $obj) {
        ${$obj->value_type} += $obj->value;
        ${$obj->value_type.'C'}++;
    }
}
echo "P1 = $P1 and P2 = $P2\n"; 
echo "P1C = $P1C and P2C = $P2C\n"; 
echo "Last timestamp = " . $array[count($array)-1]->timestamp;

输出:

P1 = 357.67 and P2 = 103.5
P1C = 2 and P2C = 2
Last timestamp = 2019-02-26 14:05:04

关于php - 一个键的 JSON 求和值,其中有多个具有相同名称的键 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54888438/

相关文章:

php - 如何将文件夹结构移动到iOS版Draftcode PHP IDE中?

arrays - 提高阵列访问速度

java - 如何转义json?

java - kotlin com.google.gson.JsonSyntaxException : java. lang.IllegalStateException:预期为 BEGIN_OBJECT,但在第 1 行第 2 列路径 $ 处为 BEGIN_ARRAY

php - 如何限制用户反馈?

php - 如何在 magento 中获取页面标题?

php - 仅收到第一个推送通知 PHP

javascript - 将 2D PHP 数组转换为 2D Json 对象以在图形上绘制

c - 从函数 C 返回填充的字符串数组

java - Log4j2 不滚动文件,而是在 SizeBasedTriggeringPolicy 之后覆盖同一文件