程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 如何用PHP4進行自然排序

如何用PHP4進行自然排序

編輯:關於PHP編程

對於這樣幾個字串:

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

試一下吧,真得很有用。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved