我有两个变量,例如:
var1 = "z";
var2 = "A";
如何检查 var1 在字母表中是否在 var2 之后(在这种情况下它应该返回 true)?
我认为回答过的每个人都同意 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(),但我倾向于避免这种情况,因为它表现出我没有花时间理解多字节字符串的行为。如果您总是使用全拉丁字符集,那可能没问题。
你尝试了什么?......很确定这有效
<?php
if(strcmp($var1,$var2) > 0) {
return true;
}
return strcmp($var1,$var2) > 0
?
如果要比较单个字符,可以使用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
你应该使用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
该解决方案可能仅适用于两个变量;但是,如果您需要解决一堆变量(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);
?>