我想对数组的排序函数提供一些帮助,因为它没有像我预期的那样工作。
此函数用于将[0,1,2,3,4,... 23]数组排序为数组[9,10,11,12,...,23,0,1,2,3 ,4,5,6,7,8],我打算集成这个函数来对矩阵表中的数据进行排序。
我无法弄清楚为什么值[0,1,2]不合适。
以下是代码:
<?php
function cmp($a, $b)
{
if ($a == $b) return 0;
if ($a == 9) return -1;
if ($b == 9) return 1;
return strcmp($a, $b);
}
$a = array(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23);
echo'<br>';
usort($a, "cmp");
//print_r($a);
echo '<pre>';print_r($a);echo '</pre>';
$arrlength=count($a);
for($x=0;$x<$arrlength;$x++)
{
echo $a[$x];
echo "<br>";
}
?>
答案 0 :(得分:0)
您似乎希望按相反的位数对整数进行排序,然后按顺序在每个数字计数组内排序。此外,还有一个特殊约束,即9计为两位数字。
此函数生成预期输出,但可能需要修改以处理测试用例中不明显的条件,例如数字90及以上(但是从注释中,这与时间有关,所以它可能就足够了):
function cmp($a, $b) {
// Handle nines
if ($a == 9) { return -1; }
if ($b == 9) { return 1; }
// Perform a comparison by digit count
$cmp = strcmp(strlen($a), strlen($b));
if ($cmp === 0) { // Same digit count, sort sequentially
return $a - $b;
}
return -$cmp; // Different digit counts; sort in reverse
}