次のような2つの変数があります。
var1 = "z";
var2 = "A";
var1がvar2よりもアルファベットの後にあるかどうかを確認するにはどうすればよいですか(この場合はtrueを返す必要があります)?
次のような2つの変数があります。
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)
。大文字の値は小文字の値よりも小さい値として比較されるため、比較を行う前に文字を小文字に変換することに注意してください。
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を返します。str1がstr2より大きい場合は>0、等しい場合は0。
それで
return strcmp(var1, var2) > 0 // will return true if var1 is after var2
このソリューションは、たった2つの変数に対してはやり過ぎかもしれません。しかし、これは、変数の束(2+)が正しい順序であるかどうかを解決する必要がある場合に永遠に当てはまります...
<?php
$var1='Z';
$var2='a';
$array1 = array();
$array[] = $var1;
$array1[] = $var2;
$array2 = sort($array1);
if($array2 === $array1){
return true;
}else{
return false;
}
?>
それ以外は、2つの変数だけでそれを実行したい場合、これは問題なく機能するはずです。
<?php
return (strcmp($var1,$var2) > 0);
?>