2013-01-11 34 views

回答

2

我想大家谁也回答同意的strcmp()是正确的答案,但到目前为止提供的每一个答案,会给你不正确的结果。例如:

echo strcmp("Z", "a"); 

结果:-1

echo strcmp("z", "A"); 

结果:1周

的strcmp()被比较的每个字符,而不是在字母的位置的二进制(ORD)位置,如你的愿望。如果你想得到正确的结果(并且我假设你这么做),则在进行比较之前,需要将字符串转换为相同的大小写。例如:

if(strcmp(strtolower($str1), strtolower($str2)) < 0) 
{ 
    echo "String 1 comes before string 2"; 
} 

编辑:您还可以使用strcasecmp(),但我倾向于避免因为它表现出的是我还没有花时间去了解多字节字符串行为。如果你总是使用全拉丁字符集,那很可能是好的。

+0

+1“如果你想要正确的结果(我假设你这样做)_”。如果我能,我会给另一个完整/正确的答案。好一个。 – Sepster

1

那你试试... ...很肯定这个工程

<?php 
if(strcmp($var1,$var2) > 0) { 
    return true; 
} 
0

您应该使用http://php.net/manual/en/function.strcmp.php

返回< 0如果str1小于str2的;如果str1大于str2,则为0;如果相等,则为0。

所以

return strcmp(var1, var2) > 0 // will return true if var1 is after var2 
1

return strcmp($var1,$var2) > 0

1

如果您正在比较单个字符,则可以使用ord(string)。请注意,大写字母值比较小于小写值,因此在比较之前将字符转换为小写。

function earlierInAlphabet($char1, $char2) 
{ 
    $char1 = strtolower($char1); 
    $char2 = strtolower($char2); 

    if(ord($char1) < ord($char2)) 
     return true; 
    else 
     return false; 
} 

function laterInAlphabet($char1, $char2) 
{ 
    $char1 = strtolower($char1); 
    $char2 = strtolower($char2); 

    if(ord($char1) > ord($char2)) 
     return true; 
    else 
     return false; 
} 

如果你比较字符串(甚至是一个字符),那么你也可以使用strcasecmp(str1, str2)

if(strcasecmp($str1, $str2) > 0) 
    // str1 is later in the alphabet 
0

这种解决方案可能是过度的顶部只有两个变量;但这是永远,如果您需要解决,如果一组变量(2+)会以正确的顺序...

<?php 
    $var1='Z'; 
    $var2='a'; 
    $array1 = array(); 
    $array[] = $var1; 
    $array1[] = $var2; 

    $array2 = sort($array1); 
    if($array2 === $array1){ 
    return true; 
    }else{ 
    return false; 
    } 
    ?> 

除此之外,如果你只想要两个变量做这应该工作很好。

<?php 
     return (strcmp($var1,$var2) > 0); 
    ?>