我有一个数组数组,我想按键排序,所以我尝试使用uksort,但结果数组根本没有排序...不确定我在这里缺少什么。我在我的自定义排序器中使用strcmp,它似乎产生了正确的结果,但最终的数组并没有完全排序。
这是相关的一段代码,我在排序之前和之后打印出数组:
echo "Before sort<br/>";
foreach($rowsByTemas as $r=>$row) {
echo ("Name:".$r."<br/>");
}
echo "<br/>";
uksort($rowsByTemas, "myTemasSorter");
echo "<br/>After sort<br/>";
foreach($rowsByTemas as $r=>$row) {
echo ("Name:".$r."<br/>");
}
这是我的自定义排序器(我删除了一些与此示例无关的元素,如果您想知道我为什么不使用ksort):
function myTemasSorter($a, $b) {
echo "comparing $a with $b<br/>";
$result=strcmp($a, $b);
echo "result: $result<br/>";
}
结果如下:
Before sort
Name:05 COMPETIDORES TAX ACCOUNTING
Name:04 COMPETIDORES LEGAL REGULATORY
Name:02 LEGAL REGULATORY
Name:01 CORPORATIVO
Name:03 TAX ACCOUNTING
comparing 02 LEGAL REGULATORY with 04 COMPETIDORES LEGAL REGULATORY
result: -512
comparing 03 TAX ACCOUNTING with 02 LEGAL REGULATORY
result: 256
comparing 02 LEGAL REGULATORY with 05 COMPETIDORES TAX ACCOUNTING
result: -768
comparing 01 CORPORATIVO with 02 LEGAL REGULATORY
result: -256
comparing 03 TAX ACCOUNTING with 01 CORPORATIVO
result: 512
comparing 04 COMPETIDORES LEGAL REGULATORY with 05 COMPETIDORES TAX ACCOUNTING
result: -256
After sort
Name:03 TAX ACCOUNTING
Name:01 CORPORATIVO
Name:02 LEGAL REGULATORY
Name:04 COMPETIDORES LEGAL REGULATORY
Name:05 COMPETIDORES TAX ACCOUNTING
当我用ksort运行相同的东西时,结果是正确的,但是我不能包含我的自定义排序规则......
非常感谢任何帮助!
答案 0 :(得分:1)
神圣的废话,我刚刚意识到我做错了什么......我没有在自定义分拣机功能中返回$ result。
所以它需要:
function myTemasSorter($a, $b) {
echo "comparing $a with $b<br/>";
$result=strcmp($a, $b);
echo "result: $result<br/>";
return $result;
}
这似乎解决了这个问题...
答案 1 :(得分:0)
仔细阅读documentation。
<强> key_compare_func 强>
如果第一个参数被认为分别小于,等于或大于第二个参数,则比较函数必须返回小于,等于或大于零的整数。
您的比较功能不会返回任何内容。解释器将返回的结果(没有,即NULL
)转换为整数并得到零。根据您的比较函数,数组中的所有键都相等。在这种情况下uksort()
的结果取决于它的实现方式(排序是否稳定)。