У меня здесь очень специфическая проблема. У меня есть многомерный массив, который я хочу отсортировать сначала по получасовым временным интервалам, а затем по датам. Функция array_multisort не будет соответствовать моим требованиям.
Пример: я хочу:
array(array("time"=>"12:15",
"date"=>"2009-03-24"),
array("time"=>"12:10",
"date"=>"2009-03-23"),
array("time"=>"12:00",
"date"=>"2009-03-24"),
array("time"=>"11:30",
"date"=>"2009-03-24"));
В итоге:
array(array("time"=>"11:30",
"date"=>"2009-03-24"),
array("time"=>"12:10",
"date"=>"2009-03-23"),
array("time"=>"12:00",
"date"=>"2009-03-24"),
array("time"=>"12:15",
"date"=>"2009-03-24"));
Я пытался сделать это с помощью uksort в сочетании с моей собственной функцией обратного вызова сортировки. Это код, который я сейчас использую:
uksort($myArray, "sortThirties");
function sortThirties($a, $b)
{
//Get the two times as timestamps relative to today
$one = strtotime($a['time']);
$two = strtotime($b['time']);
//Round them down to the nearest half-hour time
$one = $one - ($one % 1800);
$two = $two - ($two % 1800);
//Return the difference if times are unequal
//If times are equal, return the difference between dates.
return ($one == $two ? strcmp($a['date'],$b['date']) : $one - $two);
}
Сразу после запуска этой функции я распечатываю массив с помощью print_r (), и порядок данных кажется случайным. Чего мне не хватает?
EDIT :
Оказывается, порядок является полностью случайным. Я добавил эту строку в функцию sortThirties:
echo "<BR>",$a['time']," ",$b['time'];
и все, что я получил, было 50 страниц <BR>
.
Я знаю, что массив правильно структурирован, потому что этот код, выполненный в том же массиве, дает мне несортированные данные:
foreach($myArray AS $a)
{
echo "<BR>",$a['date']," ",$a['time'];
}
Единственное, о чем я могу думать, - это проблема с uksort. Есть мысли?