php比较字母位置?

时间:2013-01-11 23:53:38

标签: php

我有两个变量,例如:

var1 =  "z";
var2 = "A";

我怎样才能检查var1是否在字母表后面而不是var2(在这种情况下它应该返回true)?

6 个答案:

答案 0 :(得分: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(),但我倾向于避免这种情况,因为它表现出我没有花时间理解多字节字符串的行为。如果你总是使用全拉丁字符集,那可能就好了。

答案 1 :(得分:1)

你尝试了什么?...非常确定这是有效的

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

答案 2 :(得分:1)

return strcmp($var1,$var2) > 0

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

  

返回&lt;如果str1小于str2,则为0; &GT;如果str1大于str2则为0,如果它们相等则为0。

所以

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

答案 5 :(得分: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);
    ?>