YaBCK
YaBCK

Reputation: 3029

How to sort array by startTime?

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

Answers (2)

Rijin
Rijin

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

verhie
verhie

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

Related Questions