我有两个变量,例如:
var1 = "z";
var2 = "A";
我怎样才能检查var1是否在字母表后面而不是var2(在这种情况下它应该返回true)?
答案 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);
?>