0

我有两个变量,例如:

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

如何检查 var1 在字母表中是否在 var2 之后(在这种情况下它应该返回 true)?

4

6 回答 6

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

于 2013-01-12T00:23:52.860 回答
1

你尝试了什么?......很确定这有效

<?php
if(strcmp($var1,$var2) > 0) {
   return true;
}
于 2013-01-11T23:56:34.070 回答
1

return strcmp($var1,$var2) > 0?

于 2013-01-11T23:56:43.003 回答
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
于 2013-01-12T00:00:38.243 回答
0

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

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

所以

return strcmp(var1, var2) > 0  // will return true if var1 is after var2
于 2013-01-11T23:56:40.447 回答
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);
    ?>
于 2013-01-12T00:02:23.720 回答