Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JSON查找子数组中的最高值项&;PHP_Php_Arrays_Json_Php 7 - Fatal编程技术网

使用JSON查找子数组中的最高值项&;PHP

使用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中找到的

我已经玩了几个小时了,运气不太好

我当前的JSON如下所示:

我试图为每个日期找到“速度”最高的条目,并删除该日期下的其他条目(或使用单个条目创建一个新数组)

编辑01: 我现在尝试:

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不是免费的编码服务。你应该会的。请更新您的问题,以显示您已在某个应用程序中尝试过的内容。有关更多信息,请参阅并使用:)Use
json\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
        )

)