我尝试修改这段代码,以便使用它来对一个具有命名键/字段的多维数组进行排序。该字段是一个整数,我需要按从小到大的顺序进行排序。
function myCmp($a, $b)
{
return strcmp($a["days"], $b["days"]);
}
uasort($myArray, "myCmp");
这样排序可以满足我的需求,但是顺序不对。目前它按从大到小的顺序排序,而不是使用自然顺序。我需要按照自然顺序从小到大排序(例如,2排在5、12和24之前)。
我尝试修改这段代码,以便使用它来对一个具有命名键/字段的多维数组进行排序。该字段是一个整数,我需要按从小到大的顺序进行排序。
function myCmp($a, $b)
{
return strcmp($a["days"], $b["days"]);
}
uasort($myArray, "myCmp");
这样排序可以满足我的需求,但是顺序不对。目前它按从大到小的顺序排序,而不是使用自然顺序。我需要按照自然顺序从小到大排序(例如,2排在5、12和24之前)。
strnatcmp()是你的好朋友
例如(使用PHP 5.3闭包/匿名函数):
<?php
$myArray = array( 'foo'=>array('days'=>2), 'bar'=>array('days'=>22), 'ham'=>array('days'=>5), 'egg'=>array('days'=>12) );
uasort($myArray, function($a, $b) { return strnatcmp($a["days"], $b["days"]); });
foreach($myArray as $k=>$v) {
echo $k, '=>', $v['days'], "\n";
}
打印
foo=>2
ham=>5
egg=>12
bar=>22
function myCmp($a, $b)
{
return strcmp($b["days"], $a["days"]);
}
uasort($myArray, "myCmp");
由于您想按自然顺序排序,因此您不应该使用 strcmp
,而应该使用以下方法:
function myCmp($a, $b)
{
if ($a['days'] == $b['days']) return 0;
return ($b['days'] > $a['days']) ? -1 : 1;
}