Reputation: 3029
How would I sort this array by startTime?
Code:
function arraySorter($a, $b) {
return strtotime($a->startTime) - strtotime($b->startTime);
}
usort($this->meetingSlotsTaken, 'arraySorter');
echo "<pre>";
print_r($this->meetingSlotsTaken);
echo "</pre>";
I'm doing my code dynamically, I don't want to manually enter the keys like the following:
usort($this->meetingSlotsTaken[0]['2016-10-07 14:10:00'], 'arraySorter');
Print out:
Array
(
[0] => Array
(
[2016-10-07 14:10:00] => Array
(
[0] => stdClass Object
(
[pupil_id] => 48307
[fullname] => Callum Lacey
[grade_id] => 87
[meeting_id] => 1812
[slot_id] => 31306
[title] => Parent Evening 1 - 2016-10-07 14:00
[startTime] => 2016-10-07 14:10:00
[endTime] => 2016-10-07 14:20:00
)
[1] => stdClass Object
(
[pupil_id] => 79571
[fullname] => Daniel Lacey
[grade_id] => 87
[meeting_id] => 1812
[slot_id] => 31305
[title] => Parent Evening 1 - 2016-10-07 14:00
[startTime] => 2016-10-07 14:00:00
[endTime] => 2016-10-07 14:10:00
)
[2] => stdClass Object
(
[pupil_id] => 48307
[fullname] => Callum Lacey
[grade_id] => 87
[meeting_id] => 1816
[slot_id] => 31322
[title] => 2016-10-07 14:15
[startTime] => 2016-10-07 14:20:00
[endTime] => 2016-10-07 14:25:00
)
[3] => stdClass Object
(
[pupil_id] => 79571
[fullname] => Daniel Lacey
[grade_id] => 87
[meeting_id] => 1816
[slot_id] => 31323
[title] => 2016-10-07 14:15
[startTime] => 2016-10-07 14:25:00
[endTime] => 2016-10-07 14:30:00
)
[4] => stdClass Object
(
[pupil_id] => 48307
[fullname] => Callum Lacey
[grade_id] => 87
[meeting_id] => 1813
[slot_id] => 31311
[title] => Parent Evening 2 - 2016-10-07 14:00
[startTime] => 2016-10-07 14:30:00
[endTime] => 2016-10-07 14:40:00
)
[5] => stdClass Object
(
[pupil_id] => 48307
[fullname] => Callum Lacey
[grade_id] => 87
[meeting_id] => 1815
[slot_id] => 31318
[title] => Parent Evening 3 - 2016-10-07 14:00
[startTime] => 2016-10-07 14:40:00
[endTime] => 2016-10-07 14:50:00
)
[6] => stdClass Object
(
[pupil_id] => 79571
[fullname] => Daniel Lacey
[grade_id] => 87
[meeting_id] => 1815
[slot_id] => 31319
[title] => Parent Evening 3 - 2016-10-07 14:00
[startTime] => 2016-10-07 14:50:00
[endTime] => 2016-10-07 15:00:00
)
)
)
)
Upvotes: 0
Views: 57
Reputation: 934
Use this example :
$array = array(
0 => array(
'name' => 'Name0',
'date' => '2016-10-10 15:30:00'
),
1 => array(
'name' => 'Name1',
'date' => '2016-10-11 15:30:00'
),
2 => array(
'name' => 'Name3',
'date' => '2016-10-13 15:30:00'
),
3 => array(
'name' => 'Name4',
'date' => '2016-10-05 15:30:00'
),
4 => array(
'name' => 'Name5',
'date' => '2016-10-09 15:30:00'
)
);
$temp_array = array();
foreach ($array as $key => $value) {
$temp_array[$key] = $value['date'];
}
asort($temp_array); // arsort() for reverse order
$output = array();
foreach ($temp_array as $key => $value) {
$output[] = $array[$key];
}
echo "<pre>"; print_r($output);
Result :
Array
(
[0] => Array
(
[name] => Name4
[date] => 2016-10-05 15:30:00
)
[1] => Array
(
[name] => Name5
[date] => 2016-10-09 15:30:00
)
[2] => Array
(
[name] => Name0
[date] => 2016-10-10 15:30:00
)
[3] => Array
(
[name] => Name1
[date] => 2016-10-11 15:30:00
)
[4] => Array
(
[name] => Name3
[date] => 2016-10-13 15:30:00
)
)
Upvotes: 0
Reputation: 1318
You need to sort the array in the array in the array:
foreach($this->meetingSlotsTaken as $k1 => $v1){
foreach($v1 as $k2 => $v2){
usort($this->meetingSlotsTaken[$k1][$k2], 'arraySorter');
}
}
Upvotes: 1