0

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
                        )
                )
        )
 )
3
  • Show your full code. Commented Oct 21, 2016 at 10:09
  • @NikhilVaghela Please check updated question. Commented Oct 21, 2016 at 10:11
  • try usort($this->meetingSlotsTaken[0]['2016-10-07 14:10:00'], 'arraySorter'); Commented Oct 21, 2016 at 10:14

2 Answers 2

1

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');
    }
}
Sign up to request clarification or add additional context in comments.

Comments

0

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
        )

)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.