Reputation: 385
I am pretty new to php and Jsons and I am trying to arrange contents of a Json by date. I know about the usort() function but so far I have been unsuccessful at using it. This is the Json:
[{"id":"1","poi_id":"36","date":"1993-05-14","url":"#","p_flag":"0"},{"id":"2","poi_id":"36","date":"2000-05-14","url":"#","p_flag":"0"},{"id":"3","poi_id":"36","date":"1992-05-14","url":"#","p_flag":"0"}]
What I have been trying to do is this:
function sortByYear($a, $b) {
$dA = new DateTime($a['date']);
$dB = new DateTime($b['date']);
return $dA->format('y') - $dB->format('y');
}
$data=json_decode($unsorted, true);
print_r(usort($data, 'sortByYear'));
Upvotes: 1
Views: 263
Reputation: 219804
<?php
$unsorted = '[{"id":"1","poi_id":"36","date":"1993-05-14","url":"#","p_flag":"0"},{"id":"2","poi_id":"36","date":"2000-05-14","url":"#","p_flag":"0"},{"id":"3","poi_id":"36","date":"1992-05-14","url":"#","p_flag":"0"}]';
function sortByYear($a, $b) {
$dA = new DateTime($a['date']);
$dB = new DateTime($b['date']);
return $dA > $dB;
}
$data=json_decode($unsorted, true);
usort($data, 'sortByYear');
print_r($data);
A few points:
You need to sort by the full year Y
, not the last twp digits y
. When you cross over the new millennium you have problems.
I used >
for the comparison. It is clearer what the sort is that way.
usort()
sorts in place so no array is returned. This means you need to call var_dump()
on the original array, not usort()
.
Upvotes: 3