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