сортировать массив на основе dateTime в php

Array ( [0] => Array ( [dateTime] => 2011-10-18 0:0:00 [chanl1] => 20.7 [chanl2] => 45.4 [chanl3] => ) [1] => Array ( [dateTime] => 2011-10-18 0:15:00 [chanl1] => 20.7 [chanl2] => 45.4 [chanl3] => ) [2] => Array ( [dateTime] => 2011-10-18 00:14:00 [chanl1] => 20.7 [chanl2] => 33.8 [chanl3] => ) [3] => Array ( [dateTime] => 2011-10-18 00:29:00 [chanl1] => 20.6 [chanl2] => 33.9 [chanl3] => ) 

Я хочу отсортировать вышеупомянутый массив на основе [dateTime], конечный вывод должен быть:

 Array ( [0] => Array ( [dateTime] => 2011-10-18 0:0:00 [chanl1] => 20.7 [chanl2] => 45.4 [chanl3] => ) [1] => Array ( [dateTime] => 2011-10-18 00:14:00 [chanl1] => 20.7 [chanl2] => 33.8 [chanl3] => ) [2] => Array ( [dateTime] => 2011-10-18 0:15:00 [chanl1] => 20.7 [chanl2] => 45.4 [chanl3] => ) [3] => Array ( [dateTime] => 2011-10-18 00:29:00 [chanl1] => 20.6 [chanl2] => 33.9 [chanl3] => ) 

Кто-нибудь знает, как это сделать? Благодаря!

Используйте usort() с пользовательским компаратором:

 $arr = array(...); usort($arr, function($a, $b) { $ad = new DateTime($a['dateTime']); $bd = new DateTime($b['dateTime']); if ($ad == $bd) { return 0; } return $ad < $bd ? -1 : 1; }); 

Класс DateTime имеет перегруженные операторы сравнения ( < , > , == ).

Использование uasort() с помощью обратного вызова пользовательского сортировки должно сделать это:

 function cmp($a, $b) { if ($a['dateTime'] == $b['dateTime']) { return 0; } return ($a['dateTime'] < $b['dateTime']) ? -1 : 1; } uasort($arr, 'cmp'); 

uasort() сохраняет ключи вашего массива, вместо этого вы можете использовать usort() если вам это не нужно.

Для производительности этот метод с использованием array_multisort очень эффективен :

 $ord = array(); foreach ($array as $key => $value){ $ord[] = strtotime($value['dateTime']); } array_multisort($ord, SORT_ASC, $array); print_r($array); 

Использовать array_multisort:

  <?php $myarray=array( 0 => array ( 'dateTime' => '2011-10-18 00:0:00', 'chanl1' => '20.7', 'chanl2' => '45.4', 'chanl3' => '', ), 1 => array ( 'dateTime' => '2011-10-18 00:15:00', 'chanl1' => '20.7', 'chanl2' => '45.4', 'chanl3' => '', ), 2 => array ( 'dateTime' => '2011-10-18 00:14:00', 'chanl1' => '20.7', 'chanl2' => '33.8', 'chanl3' => '', ), 3 => array ( 'dateTime' => '2011-10-18 00:29:00', 'chanl1' => '20.6', 'chanl2' => '33.9', 'chanl3' => '' )); foreach($myarray as $c=>$key) { $dateTime[] = $key['dateTime']; $chanl1[] = $key['chanl1']; $chanl2[] = $key['chanl2']; $chanl3[] = $key['chanl3']; } array_multisort($dateTime,SORT_ASC,SORT_STRING,$myarray); print_r($myarray);