2016-10-21 4 views
0

Как бы отсортировать этот массив startTime?Как отсортировать массив по startTime?

Код:

function arraySorter($a, $b) { 
    return strtotime($a->startTime) - strtotime($b->startTime); 
} 

usort($this->meetingSlotsTaken, 'arraySorter'); 

echo "<pre>"; 
    print_r($this->meetingSlotsTaken); 
echo "</pre>"; 

Я делаю свой код динамически, я не хочу, чтобы вручную ввести ключи, как следующее:

usort($this->meetingSlotsTaken[0]['2016-10-07 14:10:00'], 'arraySorter'); 

Распечатайте:

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 
         ) 
       ) 
     ) 
) 
+0

Покажите свой полный код. –

+0

@NikhilVaghela Пожалуйста, проверьте обновленный вопрос. –

+0

попробуйте 'usort ($ this-> meetingSlotsTaken [0] ['2016-10-07 14:10:00'], 'arraySorter');' –

ответ

1

Вам необходимо отсортировать массив в массиве в массиве:

foreach($this->meetingSlotsTaken as $k1 => $v1){ 
    foreach($v1 as $k2 => $v2){ 
     usort($this->meetingSlotsTaken[$k1][$k2], 'arraySorter'); 
    } 
} 
+0

Это сработало. Спасибо :) –

0

Используйте этот пример:

$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); 

Результат:

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 
     ) 

) 
Смежные вопросы