使用JSON查找子数组中的最高值项&;PHP
我已经玩了几个小时了,运气不太好 我当前的JSON如下所示: 我试图为每个日期找到“速度”最高的条目,并删除该日期下的其他条目(或使用单个条目创建一个新数组) 编辑01: 我现在尝试:使用JSON查找子数组中的最高值项&;PHP,php,arrays,json,php-7,Php,Arrays,Json,Php 7,我已经玩了几个小时了,运气不太好 我当前的JSON如下所示: 我试图为每个日期找到“速度”最高的条目,并删除该日期下的其他条目(或使用单个条目创建一个新数组) 编辑01: 我现在尝试: function my_sort($a,$b) { return $b['speed'] - $a['speed']; } usort($finalData,"my_sort"); echo json_encode($finalData); 这将按速度对数据进行排序,但JSON现在不包括在原始JSON中找到的
function my_sort($a,$b)
{
return $b['speed'] - $a['speed'];
}
usort($finalData,"my_sort");
echo json_encode($finalData);
这将按速度对数据进行排序,但JSON现在不包括在原始JSON中找到的日期
[{"speed":33,"latitude":-11.2588112,"longitude":100.82509},
{"speed":33,"latitude":-11.2588112,"longitude":100.82509},
{"speed":31,"latitude":-11.2588112,"longitude":100.82509},
{"speed":31,"latitude":-11.2588112,"longitude":100.82509},
{"speed":33,"latitude":-11.2588112,"longitude":100.82509},
{"speed":32,"latitude":-11.2588112,"longitude":100.82509},
{"speed":24,"latitude":-11.2588112,"longitude":100.82509},
{"speed":16,"latitude":-11.2588112,"longitude":100.82509},]
工作示例:由于您只希望每个日期的速度最高,因此此代码仅循环每个项目并存储该日期速度最高的项目,如果有多个项目的速度相同,则取第一个。这样就不必对数组进行排序,然后将它们切碎,使1通过数据
这将给出输出
按速度对每个数组排序,然后使用splice()
删除除第一个元素以外的所有元素。@Barmar我对使用PHP的JSON非常陌生,你能举个例子说明我如何按速度对数组排序吗?StackOverflow不是免费的编码服务。你应该会的。请更新您的问题,以显示您已在某个应用程序中尝试过的内容。有关更多信息,请参阅并使用:)Usejson\u decode()
将其转换为PHP数组。然后使用usort()
对每个数组进行排序。然后使用array\u splice()
从数组中删除所有其他条目。@Barmar我将尝试一下,并在将来更新问题。我知道这不是一个“免费编码服务”。正如我在问题开始时所说,我已经做了3个小时了。我花了一段时间才得到这样一个数组,而我最初并没有说明。在来这里寻求帮助之前,我已经用尽了所有的能力。如果您需要JSON的结果,请使用JSON_encode($newArray);
[{"speed":33,"latitude":-11.2588112,"longitude":100.82509},
{"speed":33,"latitude":-11.2588112,"longitude":100.82509},
{"speed":31,"latitude":-11.2588112,"longitude":100.82509},
{"speed":31,"latitude":-11.2588112,"longitude":100.82509},
{"speed":33,"latitude":-11.2588112,"longitude":100.82509},
{"speed":32,"latitude":-11.2588112,"longitude":100.82509},
{"speed":24,"latitude":-11.2588112,"longitude":100.82509},
{"speed":16,"latitude":-11.2588112,"longitude":100.82509},]
<?php
$data = json_decode('{
"10-10-2019 12:00AM":[
{
"speed":33,
"latitude":-11.2588112,
"longitude":100.8249533
},
{
"speed":33,
"latitude":-11.2381112,
"longitude":100.82509
},
{
"speed":31,
"latitude":-11.827312,
"longitude":100.8242733
}
],
"10-10-2019 12:01AM":[
{
"speed":29,
"latitude":-11.2902112,
"longitude":100.8202849
},
{
"speed":26,
"latitude":-11.2826432,
"longitude":100.3760333
}
],
"10-10-2019 12:02AM":[
{
"speed":35,
"latitude":-11.2991112,
"longitude":100.0129199
},
{
"speed":33,
"latitude":-11.9273112,
"longitude":100.8734016
},
{
"speed":32,
"latitude":-11.2533212,
"longitude":100.19229
},
{
"speed":30,
"latitude":-11.2928112,
"longitude":100.2495099
},
{
"speed":24,
"latitude":-11.2228112,
"longitude":100.9266033
}
]
}',true);
$newArray=array();
foreach ($data as $key => $value) {
array_multisort(array_column($value, 'speed'), SORT_DESC, $value);
$newArray[$key]=$value[0];
}
echo "<pre>";
print_r($newArray);
echo "<pre>";
?>
$max = []; //store highest speeds in new array
foreach ($json as $key => $obj) {
$max[$key] = max(array_map(function($o) {
return $o;
}, $obj));
}
$output = [];
$input = json_decode($data, true);
foreach ( $input as $date => $dateSection ) {
$max = ["speed" => 0];
foreach ( $dateSection as $item ) {
if ( $item["speed"] > $max["speed"] ) {
$max = $item;
}
}
$output[$date] = $max;
}
print_r($output);
Array
(
[10-10-2019 12:00AM] => Array
(
[speed] => 33
[latitude] => -11.2588112
[longitude] => 100.8249533
)
[10-10-2019 12:01AM] => Array
(
[speed] => 29
[latitude] => -11.2902112
[longitude] => 100.8202849
)
[10-10-2019 12:02AM] => Array
(
[speed] => 35
[latitude] => -11.2991112
[longitude] => 100.0129199
)
)