我在这里有一个非常具体的问题。我有一个多维数组,我想先按半小时时间间隔排序,然后按日期排序。函数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() 打印出数组,并且数据的顺序似乎是随机的。我错过了什么?
编辑:事实证明,顺序是 完全随机的。我将此行添加到 sortThirties 函数中:
echo "<BR>",$a['time']," ",$b['time'];
我得到的只是 50 页的<BR>
's.
我知道数组的结构是正确的,因为在同一个数组上执行的这段代码给了我未排序的数据:
foreach($myArray AS $a)
{
echo "<BR>",$a['date']," ",$a['time'];
}
我唯一能想到的就是uksort一定有问题。有什么想法吗?