Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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
Php 重新格式化JSON数据并按日期范围分组数据_Php_Json_Sorting - Fatal编程技术网

Php 重新格式化JSON数据并按日期范围分组数据

Php 重新格式化JSON数据并按日期范围分组数据,php,json,sorting,Php,Json,Sorting,嗨,我有一个关于逻辑的问题,我不能解决这个问题。 我有json数据,如果第二天的价格和类型相同,我想通过分组数据来重新格式化 请检查下面我的Json数据 [ { "price": 1000, "date": "2021-03-13", "type": "A" }, { "price": 1000, "date": &quo

嗨,我有一个关于逻辑的问题,我不能解决这个问题。 我有json数据,如果第二天的价格和类型相同,我想通过分组数据来重新格式化 请检查下面我的Json数据

[
 {
   "price": 1000,
   "date": "2021-03-13",
   "type": "A"
 },
 {
   "price": 1000,
   "date": "2021-03-14",
   "type": "A"
 },
 {
   "price": 1000,
   "date": "2021-03-15",
   "type": "A"
 },
 {
   "price": 1300,
   "date": "2021-03-16",
   "type": "A"
 },
 {
   "price": 1000,
   "date": "2021-03-17",
   "type": "A"
 },
 {
   "price": 1300,
   "date": "2021-03-18",
   "type": "A"
 },
 {
   "price": 1500,
   "date": "2021-03-19",
   "type": "A"
 },
 {
   "price": 1500,
   "date": "2021-03-20",
   "type": "A"
 },
 {
   "price": 1500,
   "date": "2021-03-21",
   "type": "A"
 },
 {
   "price": 1500,
   "date": "2021-03-22",
   "type": "A"
 },
 {
   "price": 2000,
   "date": "2021-03-13",
   "type": "B"
 },
 {
   "price": 2000,
   "date": "2021-03-14",
   "type": "B"
 },
 {
   "price": 2000,
   "date": "2021-03-15",
   "type": "B"
 },
 {
   "price": 2000,
   "date": "2021-03-16",
   "type": "B"
 },
 {
   "price": 2000,
   "date": "2021-03-17",
   "type": "B"
 }
]
我想像这样重新格式化(以相同的价格和类型分组数据)


现在我只知道如何创建临时数组和循环json数据,但我不知道如何转换为startDate和endDate。您需要一个临时数组,作为排序的“缓存”和结果数组。对于每种类型,请在缓存中记录价格和开始日期,并将类型用作键

缓存关联阵列的图示:

$cache=[
“A”=>[
“价格”=>1000,
“日期”=>“2021-03-13”,
“类型”=>“A”
],
]
首先,按日期对数组排序。然后循环数组并在临时关联数组中创建“缓存”项。创建时,“日期”是您的“开始日期”。因为“A”键还不存在,所以你知道你不需要比较任何东西

但是,如果项目的类型已经存在于缓存中(沿路有几个循环),那么您知道它不是第一次出现在循环中,所以现在您可以比较价格

如果价格相同,则更新缓存中的“endDate”。如果价格不同,则将该项从缓存放到结果数组中-那里已经有startDate和endDate。在将“日期”键放入结果之前,您可能希望从项目中删除该键

最后,使用新的startDate和price更新缓存中的项(并删除endDate,或重新创建整个项),然后使用源数组中的其他项重新开始

[
     [
       "type"=> "A"
       "price"=> 1000
       "startDate"=> "2021-03-13"
       "endDate"=> "2021-03-15"
     ],
     [
       "type"=> "A"
       "price"=> 1300
       "startDate"=> "2021-03-16"
       "endDate"=> "2021-03-16"
     ],
     [
       "type"=> "A"
       "price"=> 1000
       "startDate"=> "2021-03-17"
       "endDate"=> "2021-03-17"
     ],
     [
       "type"=> "A"
       "price"=> 1300
       "startDate"=> "2021-03-18"
       "endDate"=> "2021-03-18"
     ],
     [
       "type"=> "A"
       "price"=> 1500
       "startDate"=> "2021-03-19"
       "endDate"=> "2021-03-22"
     ],
     [
       "type"=> "B"
       "price"=> 2000
       "startDate"=> "2021-03-13"
       "endDate"=> "2021-03-17"
     ],

]