对于这样几个字串:
inf1
inf3
inf12
如果我们只是用strcmp()函数来做比较,得出的次序如下:
inf1
inf12
inf3
可这显然不是我们想要的结果,一般我们的解决方法是采用在数字前加一个0,如 inf01 inf03 inf12 这样。可不可以不用加这个0也能按自然次序(nature order)排出我们想要的真正的顺序呢?
在PHP4中提供了这样两个函数可以做到这一点:
int strnatcasecmp (string str1, string str2)
int strnatcmp(string str1, string str2)
它们支持的版本是:PHP4 >= 4.0RC2
说明如下:
按自然次序(nature order)对 str1 str2 进行排序。
返回值 返回值 =0 表示 str1 等于 str2,
返回值 >0 表示 str1 大于 str2。
例子如下:
$str=array("a","a0","a3","a2","a10","a18","a24");
$k=count($str);
echo "total=".$k."
";
echo "
用strnatcmp排序
";
for($i=1;$iif(strnatcmp($str[$i-1],$str[$i])>0){
$tmp=$str[$i-1];
$str[$i-1]=$str[$i];
$str[$i]=$tmp;
}
}
print_r($str);
echo "
用strcmp排序
";