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