2013-05-08 58 views
2

我想比較兩個字符串「數字」。我的意思是像2C小於11A。我想這和它不工作:比較字符串「數字優先」

if("2A" < "11A"){ 
    echo "First corect"; 
} 

if(strcmp("2A", "11A") < 0){ 
    echo "Last corect"; 
} 

echo "Tests completed"; 
+0

你必須字符串令牌使用正則表達式第一分開。然後,您可以先對令牌進行排序,然後重新組合結果。 – arkascha 2013-05-08 12:26:18

+1

你究竟用「數字」來表示什麼? – F0G 2013-05-08 12:26:37

+0

是2A和11A的十六進制數字嗎? – Kasyx 2013-05-08 12:27:35

回答

7

您正在尋找strnatcmp(或其病例不敏感的兄弟姐妹,strnatcasecmp)。

這將您輸入的數字部分的比較結果爲數字(將「2whatever」之前「11whatever」)和文字部分爲文本(將「2A」,「2B」之前)。

+0

+1打我到它 – 2013-05-08 12:30:50

0
if(intval(0x2A) < intval(0x11A)){ 
    echo "First corect"; 
} 
else 
{ 
    echo "Tests incompleted"; 
} 

嘗試這個代碼

0

編寫的函數:

  1. 標記化每個String成列表<Object>其中每個對象可以是字符串整數與整數正在創建從非數字之間的連續數字字符串開始,字符串在任何2位之間是連續的非數字。
  2. 在循環中逐個比較兩個List元素。如果對象的類型不匹配(即將整數與字符串進行比較),則將您希望排序的較小/較大決定設置爲較小,字母或數字。如果他們只是配合做小於等於比較大。
  3. 如果列表中的兩個Nth elements都相等,繼續比較N+1th elements,否則將return t/f根據整數或字符串進行字符串比較。