对于这样几个字串: 
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, 
返回值 >0 表示 str1 大于 str2。 
例子如下:  
$str=array("a","a0","a3","a2","a10","a18","a24"); 
$k=count($str); 
echo "total=".$k."
"; 
echo "
用strnatcmp排序
"; 
for($i=1;$i<$k;$i++){ 
if(strnatcmp($str[$i-1],$str[$i])>0){ 
$tmp=$str[$i-1]; 
$str[$i-1]=$str[$i]; 
$str[$i]=$tmp; 
} 
} 
print_r($str); 
echo "
用strcmp排序
"; 
for($i=1;$i<$k;$i++){ 
if(strcmp($str[$i-1],$str[$i])>0){ 
$tmp=$str[$i-1]; 
$str[$i-1]=$str[$i]; 
$str[$i]=$tmp; 
} 
} 
print_r($str); 
echo "
用sort排序
"; 
sort($str); 
print_r($str); 
?> 
输出如下: 
total=7 
用strnatcmp排序 
Array ( [0] => a [1] => a0 [2] => a2 [3] => a3 [4] => a10 [5] => a18 [6] => a24 ) 
用strcmp排序 
Array ( [0] => a [1] => a0 [2] => a2 [3] => a10 [4] => a18 [5] => a24 [6] => a3 ) 
用sort排序 
Array ( [0] => a [1] => a0 [2] => a10 [3] => a18 [4] => a2 [5] => a24 [6] => a3 ) 
明白了吗? 
其实这个函数也支持比较复杂一点的功能。如: 
a < a0 < a1 < a1a < a1b < a2 < a10 < a20 
x2-g8 < x2-y7 < x2-y08 < x8-y8 
1.001 < 1.002 < 1.010 < 1.02 < 1.1 < 1.3 
试一下吧,真得很有用。						
http://www.bkjia.com/PHPjc/532095.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/532095.htmlTechArticle对于这样几个字串: inf1 inf3 inf12 如果我们只是用strcmp()函数来做比较,得出的次序如下: inf1 inf12 inf3 可这显然不是我们想要的结果,一般...