我试图在PHP中对数组进行排序。数组是偶数索引和时间中的名称(MM:SS.XX)。
Array ( [0] => Emma Hogan [1] => 09:12.55 [2] => Bob Harrison [3] => 12:00.15 [4] => Dave Haenze [5] => 10:00.98 [6] => Tau Newman [7] => 07:05.15 [8] => Cai Jones [9] => 44:15.59 )
我想要它做的是抓住每个其他元素(时间)并按最短时间对数组进行排序。我的代码看起来像这样:
for($i=1;$i<$arrlength;$i+=2) {
$j = $i;
while (($j>0)&&($array[($j-2)] > $array[$j])){
$temp = $array[$j];
$array[$j] = $array[($j-2)];
$array[($j-2)] = $temp;
$temp2 = $array[($j+1)];
$array[($j+1)] = $array[($j-1)];
$array[($j-1)] = $temp;
$j = $j - 2;
}
}
但是,它返回的输出如下所示:
Emma Hogan
07:05.15
07:05.15
09:12.55
Bob Harrison
10:00.98
10:00.98
12:00.15
Dave Haenze
44:15.59
我做错了什么?我需要更改什么才能使其正确排序?
答案 0 :(得分:0)
正如您所看到的,阵列布局对您想要完成的任务毫无意义。我首先采用的是修复,而不是弯曲头部并尝试处理不良数据结构。即:
$tmp = array();
for($i=0; $i<count($srcArray); $i+=2) {
$tmp[$srcArray[i]] = $srcArray[$i+1];
}
然后您可以使用usort()对$tmp
进行排序。或者更好的是,您可以将时间转换为数值,然后只需用户普通的sort()来完成工作。
答案 1 :(得分:0)
您已表明可以更改阵列格式。如果是这样,请考虑以下事项:
$array = array ( 'Emma Hogan' => '09:12.55' );
asort($array); //or arsort()
或者:
$array = array ( '09:12.55' => 'Emma Hogan' );
ksort($array); //or krsort()