按日期键排序 php 关联嵌套数组
order php associative nested array by date key
我想按升序排列这个关联数组的每个 [dataPartenza] 中的日期,我找到了很多关于索引数组的答案,但没有找到类似的答案。这里的问题是日期不是数组的值但是键本身,所以我不能应用我在其他答案中找到的 usort 方法。
PHP:
[destinazione] => Array(
[Corfù] => Array(
[dataPartenza] => Array(
[2021 - 07 - 16] => Array(
[soldout] => [sistemazione] => Array(
[basic] => Array(
[00 | quota base] => Array(
[capienza] => N / S[prezzo] => 365.00
)[01 | supplemento monolocale] => Array(
[capienza] => 2[prezzo] => 50.00
)
)[comfort] => Array(
[00 | quota base] => Array(
[capienza] => N / S[prezzo] => 395.00
)[01 | supplemento monolocale] => Array(
[capienza] => 2[prezzo] => 60.00
)
)
)
)[2021 - 07 - 23] => Array(
[soldout] => [sistemazione] => Array(
[basic] => Array(
[00 | quota base] => Array(
[capienza] => N / S[prezzo] => 365.00
)[01 | supplemento monolocale] => Array(
[capienza] => 2[prezzo] => 50.00
)
)[comfort] => Array(
[00 | quota base] => Array(
[capienza] => N / S[prezzo] => 395.00
)[01 | supplemento monolocale] => Array(
[capienza] => 2[prezzo] => 60.00
)
)
)
)[2021 - 08 - 06] => Array(
[soldout] => [sistemazione] => Array(
[basic] => Array(
[00 | quota base] => Array(
[capienza] => N / S[prezzo] => 365.00
)[01 | supplemento monolocale] => Array(
[capienza] => N / S[prezzo] => 50.00
)
)[comfort] => Array(
[00 | quota base] => Array(
[capienza] => N / S[prezzo] => 385.00
)[01 | supplemento monolocale] => Array(
[capienza] => 2[prezzo] => 60.00
)
)
)
)
)
)[Zante] => Array(
[dataPartenza] => Array(
[2021 - 07 - 17] => Array(
[soldout] => [sistemazione] => Array(
[basic] => Array(
[00 | quota base] => Array(
[capienza] => 5[prezzo] => 395.00
)[01 | bilocale] => Array(
[capienza] => 4[prezzo] => 415.00
)[02 | studios] => Array(
[capienza] => 3[prezzo] => 405.00
)[03 | studios] => Array(
[capienza] => 2[prezzo] => 425.00
)
)
)
)[2021 - 07 - 24] => Array(
[soldout] => [sistemazione] => Array(
[basic] => Array(
[00 | quota base] => Array(
[capienza] => N / S[prezzo] => 395.00
)[01 | bilocale] => Array(
[capienza] => 4[prezzo] => 425.00
)[02 | studio] => Array(
[capienza] => 3[prezzo] => 415.00
)[03 | studio] => Array(
[capienza] => 2[prezzo] => 445.00
)
)
)
)[2021 - 07 - 31] => Array(
[soldout] => [sistemazione] => Array(
[basic] => Array(
[00 | quota base] => Array(
[capienza] => N / S[prezzo] => 395.00
)[01 | bilocale] => Array(
[capienza] => 4[prezzo] => 425.00
)[02 | studio] => Array(
[capienza] => 3[prezzo] => 415.00
)[03 | studio] => Array(
[capienza] => 3[prezzo] => 445.00
)
)
)
)
)
)[Pag] => Array(
[dataPartenza] => Array(
[2021 - 07 - 18] => Array(
[soldout] => [sistemazione] => Array(
[basic] => Array(
[00 | quota base] => Array(
[capienza] => N / S[prezzo] => 274.00
)[01 | supplemento monolocale] => Array(
[capienza] => 3[prezzo] => 30.00
)[02 | supplemento monolocale] => Array(
[capienza] => 2[prezzo] => 50.00
)
)
)
)[2021 - 07 - 25] => Array(
[soldout] => [sistemazione] => Array(
[basic] => Array(
[00 | quota base] => Array(
[capienza] => N / S[prezzo] => 274.00
)[01 | supplemento monolocale] => Array(
[capienza] => 3[prezzo] => 30.00
)[02 | supplemento monolocale] => Array(
[capienza] => 2[prezzo] => 50.00
)
)
)
)[2021 - 08 - 01] => Array(
[soldout] => [sistemazione] => Array(
[basic] => Array(
[00 | quota base] => Array(
[capienza] => N / S[prezzo] => 274.00
)[01 | supplemento monolocale] => Array(
[capienza] => 3[prezzo] => 30.00
)[02 | supplemento monolocale] => Array(
[capienza] => 2[prezzo] => 50.00
)
)
)
)
)
)
))
按照建议,我也添加了一个更紧凑的 json_encode 版本
JSON:
{
"destinazione":{
"Corfù":{
"dataPartenza":{
"2021-07-16":{
"soldout":false,
"sistemazione":{
"basic":{
"00|quota base":{
"capienza":"N/S",
"prezzo":"365.00"
},
"01|supplemento monolocale":{
"capienza":"2",
"prezzo":"50.00"
}
},
"comfort":{
"00|quota base":{
"capienza":"N/S",
"prezzo":"395.00"
},
"01|supplemento monolocale":{
"capienza":"2",
"prezzo":"60.00"
}
}
}
},
"2021-07-23":{
"soldout":false,
"sistemazione":{
"basic":{
"00|quota base":{
"capienza":"N/S",
"prezzo":"365.00"
},
"01|supplemento monolocale":{
"capienza":"2",
"prezzo":"50.00"
}
},
"comfort":{
"00|quota base":{
"capienza":"N/S",
"prezzo":"395.00"
},
"01|supplemento monolocale":{
"capienza":"2",
"prezzo":"60.00"
}
}
}
},
"2021-08-06":{
"soldout":false,
"sistemazione":{
"basic":{
"00|quota base":{
"capienza":"N/S",
"prezzo":"365.00"
},
"01|supplemento monolocale":{
"capienza":"N/S",
"prezzo":"50.00"
}
},
"comfort":{
"00|quota base":{
"capienza":"N/S",
"prezzo":"385.00"
},
"01|supplemento monolocale":{
"capienza":"2",
"prezzo":"60.00"
}
}
}
}
}
},
"Zante":{
"dataPartenza":{
"2021-07-17":{
"soldout":false,
"sistemazione":{
"basic":{
"00|quota base":{
"capienza":"5",
"prezzo":"395.00"
},
"01|bilocale":{
"capienza":"4",
"prezzo":"415.00"
},
"02|studios":{
"capienza":"3",
"prezzo":"405.00"
},
"03|studios":{
"capienza":"2",
"prezzo":"425.00"
}
}
}
},
"2021-07-24":{
"soldout":false,
"sistemazione":{
"basic":{
"00|quota base":{
"capienza":"N/S",
"prezzo":"395.00"
},
"01|bilocale ":{
"capienza":"4",
"prezzo":"425.00"
},
"02|studio":{
"capienza":"3",
"prezzo":"415.00"
},
"03|studio":{
"capienza":"2",
"prezzo":"445.00"
}
}
}
},
"2021-07-31":{
"soldout":false,
"sistemazione":{
"basic":{
"00|quota base":{
"capienza":"N/S",
"prezzo":"395.00"
},
"01|bilocale":{
"capienza":"4",
"prezzo":"425.00"
},
"02|studio":{
"capienza":"3",
"prezzo":"415.00"
},
"03|studio":{
"capienza":"3",
"prezzo":"445.00"
}
}
}
}
}
},
"Pag":{
"dataPartenza":{
"2021-07-18":{
"soldout":false,
"sistemazione":{
"basic":{
"00|quota base":{
"capienza":"N/S",
"prezzo":"274.00"
},
"01|supplemento monolocale":{
"capienza":"3",
"prezzo":"30.00"
},
"02|supplemento monolocale":{
"capienza":"2",
"prezzo":"50.00"
}
}
}
},
"2021-07-25":{
"soldout":false,
"sistemazione":{
"basic":{
"00|quota base":{
"capienza":"N/S",
"prezzo":"274.00"
},
"01|supplemento monolocale":{
"capienza":"3",
"prezzo":"30.00"
},
"02|supplemento monolocale":{
"capienza":"2",
"prezzo":"50.00"
}
}
}
},
"2021-08-01":{
"soldout":false,
"sistemazione":{
"basic":{
"00|quota base":{
"capienza":"N/S",
"prezzo":"274.00"
},
"01|supplemento monolocale":{
"capienza":"3",
"prezzo":"30.00"
},
"02|supplemento monolocale":{
"capienza":"2",
"prezzo":"50.00"
}
}
}
}
}
}
}
}
I'm putting here the snippet for the solution provided by @Anton this is working perfectly with usort and regular sort flag for yyyy-mm-dd formatted value:
**PHP:**
```php
<?php
$data = '{"destinazione":{"Corfù":{"dataPartenza":{"2021-07-24":{"soldout":false,"sistemazione":{"basic":{"00|quota base":{"capienza":"N/S","prezzo":"365.00"},"01|supplemento monolocale":{"capienza":"2","prezzo":"50.00"}},"comfort":{"00|quota base":{"capienza":"N/S","prezzo":"395.00"},"01|supplemento monolocale":{"capienza":"2","prezzo":"60.00"}}}},"2021-07-23":{"soldout":false,"sistemazione":{"basic":{"00|quota base":{"capienza":"N/S","prezzo":"365.00"},"01|supplemento monolocale":{"capienza":"2","prezzo":"50.00"}},"comfort":{"00|quota base":{"capienza":"N/S","prezzo":"395.00"},"01|supplemento monolocale":{"capienza":"2","prezzo":"60.00"}}}},"2021-01-06":{"soldout":false,"sistemazione":{"basic":{"00|quota base":{"capienza":"N/S","prezzo":"365.00"},"01|supplemento monolocale":{"capienza":"N/S","prezzo":"50.00"}},"comfort":{"00|quota base":{"capienza":"N/S","prezzo":"385.00"},"01|supplemento monolocale":{"capienza":"2","prezzo":"60.00"}}}}}},"Zante":{"dataPartenza":{"2021-07-17":{"soldout":false,"sistemazione":{"basic":{"00|quota base":{"capienza":"5","prezzo":"395.00"},"01|bilocale":{"capienza":"4","prezzo":"415.00"},"02|studios":{"capienza":"3","prezzo":"405.00"},"03|studios":{"capienza":"2","prezzo":"425.00"}}}},"2021-07-24":{"soldout":false,"sistemazione":{"basic":{"00|quota base":{"capienza":"N/S","prezzo":"395.00"},"01|bilocale ":{"capienza":"4","prezzo":"425.00"},"02|studio":{"capienza":"3","prezzo":"415.00"},"03|studio":{"capienza":"2","prezzo":"445.00"}}}},"2021-07-31":{"soldout":false,"sistemazione":{"basic":{"00|quota base":{"capienza":"N/S","prezzo":"395.00"},"01|bilocale":{"capienza":"4","prezzo":"425.00"},"02|studio":{"capienza":"3","prezzo":"415.00"},"03|studio":{"capienza":"3","prezzo":"445.00"}}}}}},"Pag":{"dataPartenza":{"2021-07-18":{"soldout":false,"sistemazione":{"basic":{"00|quota base":{"capienza":"N/S","prezzo":"274.00"},"01|supplemento monolocale":{"capienza":"3","prezzo":"30.00"},"02|supplemento monolocale":{"capienza":"2","prezzo":"50.00"}}}},"2021-08-01":{"soldout":false,"sistemazione":{"basic":{"00|quota base":{"capienza":"N/S","prezzo":"274.00"},"01|supplemento monolocale":{"capienza":"3","prezzo":"30.00"},"02|supplemento monolocale":{"capienza":"2","prezzo":"50.00"}}}}}}}}';
$input = json_decode($data, true);
$output = $input;
foreach ($input['destinazione'] as $city_name => $city_data) {
$dataPartenza = $city_data['dataPartenza'];
ksort($dataPartenza);
$output['destinazione'][$city_name]['dataPartenza'] = $dataPartenza;
}
echo "\n\nOUTPUT: " . json_encode($output);
编辑: 以更易读的格式清除数组并添加 json 版本
答案已在评论中:ksort
。这是示例:click.
所以我对数组进行排序,然后返回结果:
// get 'dataPartenza'
$dataPartenza = $city_data['dataPartenza'];
// sort it
ksort($dataPartenza);
// put to result
$output['destinazione'][$city_name]['dataPartenza'] = $dataPartenza;
我想按升序排列这个关联数组的每个 [dataPartenza] 中的日期,我找到了很多关于索引数组的答案,但没有找到类似的答案。这里的问题是日期不是数组的值但是键本身,所以我不能应用我在其他答案中找到的 usort 方法。
PHP:
[destinazione] => Array(
[Corfù] => Array(
[dataPartenza] => Array(
[2021 - 07 - 16] => Array(
[soldout] => [sistemazione] => Array(
[basic] => Array(
[00 | quota base] => Array(
[capienza] => N / S[prezzo] => 365.00
)[01 | supplemento monolocale] => Array(
[capienza] => 2[prezzo] => 50.00
)
)[comfort] => Array(
[00 | quota base] => Array(
[capienza] => N / S[prezzo] => 395.00
)[01 | supplemento monolocale] => Array(
[capienza] => 2[prezzo] => 60.00
)
)
)
)[2021 - 07 - 23] => Array(
[soldout] => [sistemazione] => Array(
[basic] => Array(
[00 | quota base] => Array(
[capienza] => N / S[prezzo] => 365.00
)[01 | supplemento monolocale] => Array(
[capienza] => 2[prezzo] => 50.00
)
)[comfort] => Array(
[00 | quota base] => Array(
[capienza] => N / S[prezzo] => 395.00
)[01 | supplemento monolocale] => Array(
[capienza] => 2[prezzo] => 60.00
)
)
)
)[2021 - 08 - 06] => Array(
[soldout] => [sistemazione] => Array(
[basic] => Array(
[00 | quota base] => Array(
[capienza] => N / S[prezzo] => 365.00
)[01 | supplemento monolocale] => Array(
[capienza] => N / S[prezzo] => 50.00
)
)[comfort] => Array(
[00 | quota base] => Array(
[capienza] => N / S[prezzo] => 385.00
)[01 | supplemento monolocale] => Array(
[capienza] => 2[prezzo] => 60.00
)
)
)
)
)
)[Zante] => Array(
[dataPartenza] => Array(
[2021 - 07 - 17] => Array(
[soldout] => [sistemazione] => Array(
[basic] => Array(
[00 | quota base] => Array(
[capienza] => 5[prezzo] => 395.00
)[01 | bilocale] => Array(
[capienza] => 4[prezzo] => 415.00
)[02 | studios] => Array(
[capienza] => 3[prezzo] => 405.00
)[03 | studios] => Array(
[capienza] => 2[prezzo] => 425.00
)
)
)
)[2021 - 07 - 24] => Array(
[soldout] => [sistemazione] => Array(
[basic] => Array(
[00 | quota base] => Array(
[capienza] => N / S[prezzo] => 395.00
)[01 | bilocale] => Array(
[capienza] => 4[prezzo] => 425.00
)[02 | studio] => Array(
[capienza] => 3[prezzo] => 415.00
)[03 | studio] => Array(
[capienza] => 2[prezzo] => 445.00
)
)
)
)[2021 - 07 - 31] => Array(
[soldout] => [sistemazione] => Array(
[basic] => Array(
[00 | quota base] => Array(
[capienza] => N / S[prezzo] => 395.00
)[01 | bilocale] => Array(
[capienza] => 4[prezzo] => 425.00
)[02 | studio] => Array(
[capienza] => 3[prezzo] => 415.00
)[03 | studio] => Array(
[capienza] => 3[prezzo] => 445.00
)
)
)
)
)
)[Pag] => Array(
[dataPartenza] => Array(
[2021 - 07 - 18] => Array(
[soldout] => [sistemazione] => Array(
[basic] => Array(
[00 | quota base] => Array(
[capienza] => N / S[prezzo] => 274.00
)[01 | supplemento monolocale] => Array(
[capienza] => 3[prezzo] => 30.00
)[02 | supplemento monolocale] => Array(
[capienza] => 2[prezzo] => 50.00
)
)
)
)[2021 - 07 - 25] => Array(
[soldout] => [sistemazione] => Array(
[basic] => Array(
[00 | quota base] => Array(
[capienza] => N / S[prezzo] => 274.00
)[01 | supplemento monolocale] => Array(
[capienza] => 3[prezzo] => 30.00
)[02 | supplemento monolocale] => Array(
[capienza] => 2[prezzo] => 50.00
)
)
)
)[2021 - 08 - 01] => Array(
[soldout] => [sistemazione] => Array(
[basic] => Array(
[00 | quota base] => Array(
[capienza] => N / S[prezzo] => 274.00
)[01 | supplemento monolocale] => Array(
[capienza] => 3[prezzo] => 30.00
)[02 | supplemento monolocale] => Array(
[capienza] => 2[prezzo] => 50.00
)
)
)
)
)
)
))
按照建议,我也添加了一个更紧凑的 json_encode 版本
JSON:
{
"destinazione":{
"Corfù":{
"dataPartenza":{
"2021-07-16":{
"soldout":false,
"sistemazione":{
"basic":{
"00|quota base":{
"capienza":"N/S",
"prezzo":"365.00"
},
"01|supplemento monolocale":{
"capienza":"2",
"prezzo":"50.00"
}
},
"comfort":{
"00|quota base":{
"capienza":"N/S",
"prezzo":"395.00"
},
"01|supplemento monolocale":{
"capienza":"2",
"prezzo":"60.00"
}
}
}
},
"2021-07-23":{
"soldout":false,
"sistemazione":{
"basic":{
"00|quota base":{
"capienza":"N/S",
"prezzo":"365.00"
},
"01|supplemento monolocale":{
"capienza":"2",
"prezzo":"50.00"
}
},
"comfort":{
"00|quota base":{
"capienza":"N/S",
"prezzo":"395.00"
},
"01|supplemento monolocale":{
"capienza":"2",
"prezzo":"60.00"
}
}
}
},
"2021-08-06":{
"soldout":false,
"sistemazione":{
"basic":{
"00|quota base":{
"capienza":"N/S",
"prezzo":"365.00"
},
"01|supplemento monolocale":{
"capienza":"N/S",
"prezzo":"50.00"
}
},
"comfort":{
"00|quota base":{
"capienza":"N/S",
"prezzo":"385.00"
},
"01|supplemento monolocale":{
"capienza":"2",
"prezzo":"60.00"
}
}
}
}
}
},
"Zante":{
"dataPartenza":{
"2021-07-17":{
"soldout":false,
"sistemazione":{
"basic":{
"00|quota base":{
"capienza":"5",
"prezzo":"395.00"
},
"01|bilocale":{
"capienza":"4",
"prezzo":"415.00"
},
"02|studios":{
"capienza":"3",
"prezzo":"405.00"
},
"03|studios":{
"capienza":"2",
"prezzo":"425.00"
}
}
}
},
"2021-07-24":{
"soldout":false,
"sistemazione":{
"basic":{
"00|quota base":{
"capienza":"N/S",
"prezzo":"395.00"
},
"01|bilocale ":{
"capienza":"4",
"prezzo":"425.00"
},
"02|studio":{
"capienza":"3",
"prezzo":"415.00"
},
"03|studio":{
"capienza":"2",
"prezzo":"445.00"
}
}
}
},
"2021-07-31":{
"soldout":false,
"sistemazione":{
"basic":{
"00|quota base":{
"capienza":"N/S",
"prezzo":"395.00"
},
"01|bilocale":{
"capienza":"4",
"prezzo":"425.00"
},
"02|studio":{
"capienza":"3",
"prezzo":"415.00"
},
"03|studio":{
"capienza":"3",
"prezzo":"445.00"
}
}
}
}
}
},
"Pag":{
"dataPartenza":{
"2021-07-18":{
"soldout":false,
"sistemazione":{
"basic":{
"00|quota base":{
"capienza":"N/S",
"prezzo":"274.00"
},
"01|supplemento monolocale":{
"capienza":"3",
"prezzo":"30.00"
},
"02|supplemento monolocale":{
"capienza":"2",
"prezzo":"50.00"
}
}
}
},
"2021-07-25":{
"soldout":false,
"sistemazione":{
"basic":{
"00|quota base":{
"capienza":"N/S",
"prezzo":"274.00"
},
"01|supplemento monolocale":{
"capienza":"3",
"prezzo":"30.00"
},
"02|supplemento monolocale":{
"capienza":"2",
"prezzo":"50.00"
}
}
}
},
"2021-08-01":{
"soldout":false,
"sistemazione":{
"basic":{
"00|quota base":{
"capienza":"N/S",
"prezzo":"274.00"
},
"01|supplemento monolocale":{
"capienza":"3",
"prezzo":"30.00"
},
"02|supplemento monolocale":{
"capienza":"2",
"prezzo":"50.00"
}
}
}
}
}
}
}
}
I'm putting here the snippet for the solution provided by @Anton this is working perfectly with usort and regular sort flag for yyyy-mm-dd formatted value:
**PHP:**
```php
<?php
$data = '{"destinazione":{"Corfù":{"dataPartenza":{"2021-07-24":{"soldout":false,"sistemazione":{"basic":{"00|quota base":{"capienza":"N/S","prezzo":"365.00"},"01|supplemento monolocale":{"capienza":"2","prezzo":"50.00"}},"comfort":{"00|quota base":{"capienza":"N/S","prezzo":"395.00"},"01|supplemento monolocale":{"capienza":"2","prezzo":"60.00"}}}},"2021-07-23":{"soldout":false,"sistemazione":{"basic":{"00|quota base":{"capienza":"N/S","prezzo":"365.00"},"01|supplemento monolocale":{"capienza":"2","prezzo":"50.00"}},"comfort":{"00|quota base":{"capienza":"N/S","prezzo":"395.00"},"01|supplemento monolocale":{"capienza":"2","prezzo":"60.00"}}}},"2021-01-06":{"soldout":false,"sistemazione":{"basic":{"00|quota base":{"capienza":"N/S","prezzo":"365.00"},"01|supplemento monolocale":{"capienza":"N/S","prezzo":"50.00"}},"comfort":{"00|quota base":{"capienza":"N/S","prezzo":"385.00"},"01|supplemento monolocale":{"capienza":"2","prezzo":"60.00"}}}}}},"Zante":{"dataPartenza":{"2021-07-17":{"soldout":false,"sistemazione":{"basic":{"00|quota base":{"capienza":"5","prezzo":"395.00"},"01|bilocale":{"capienza":"4","prezzo":"415.00"},"02|studios":{"capienza":"3","prezzo":"405.00"},"03|studios":{"capienza":"2","prezzo":"425.00"}}}},"2021-07-24":{"soldout":false,"sistemazione":{"basic":{"00|quota base":{"capienza":"N/S","prezzo":"395.00"},"01|bilocale ":{"capienza":"4","prezzo":"425.00"},"02|studio":{"capienza":"3","prezzo":"415.00"},"03|studio":{"capienza":"2","prezzo":"445.00"}}}},"2021-07-31":{"soldout":false,"sistemazione":{"basic":{"00|quota base":{"capienza":"N/S","prezzo":"395.00"},"01|bilocale":{"capienza":"4","prezzo":"425.00"},"02|studio":{"capienza":"3","prezzo":"415.00"},"03|studio":{"capienza":"3","prezzo":"445.00"}}}}}},"Pag":{"dataPartenza":{"2021-07-18":{"soldout":false,"sistemazione":{"basic":{"00|quota base":{"capienza":"N/S","prezzo":"274.00"},"01|supplemento monolocale":{"capienza":"3","prezzo":"30.00"},"02|supplemento monolocale":{"capienza":"2","prezzo":"50.00"}}}},"2021-08-01":{"soldout":false,"sistemazione":{"basic":{"00|quota base":{"capienza":"N/S","prezzo":"274.00"},"01|supplemento monolocale":{"capienza":"3","prezzo":"30.00"},"02|supplemento monolocale":{"capienza":"2","prezzo":"50.00"}}}}}}}}';
$input = json_decode($data, true);
$output = $input;
foreach ($input['destinazione'] as $city_name => $city_data) {
$dataPartenza = $city_data['dataPartenza'];
ksort($dataPartenza);
$output['destinazione'][$city_name]['dataPartenza'] = $dataPartenza;
}
echo "\n\nOUTPUT: " . json_encode($output);
编辑: 以更易读的格式清除数组并添加 json 版本
答案已在评论中:ksort
。这是示例:click.
所以我对数组进行排序,然后返回结果:
// get 'dataPartenza'
$dataPartenza = $city_data['dataPartenza'];
// sort it
ksort($dataPartenza);
// put to result
$output['destinazione'][$city_name]['dataPartenza'] = $dataPartenza;