strcmpとstrcasecmpについての検証結果
双方ともに第一引数と第二引数を比較して第一引数より第二引数が大きければ負の値。小さければ正の値、同じなら0を返す。
例)
<?php
//strcmpは大文字小文字を区別する。strcasecmpは大文字小文字を区別しない
echo strcmp('a','A')."\n";//32
echo strcasecmp('a','A')."\n";//0
echo strcmp('a','b')."\n";//-1
echo strcasecmp('a','b');//-1
- strcmpは大文字小文字を区別する。strcasecmpは大文字小文字を区別しない
- 小文字の「a」の方が大文字の「A」よりも大きい(比較すると32が出る為)
- aとbではbの方が大きい(比較すると-1が出る為)
strcmpについての検証結果
例)
<?php
$a = strcmp('a','b');
var_dump($a);//-1
$a = strcmp('a','f');
var_dump($a);//-5
$a = strcmp('a','eab');
var_dump($a);//-4
$a = strcmp('c','b');
var_dump($a);//1
$a = strcmp('b','b');
var_dump($a);//0
$a = strcmp('あ','い');
var_dump($a);//-2
$a = strcmp('あ','う');
var_dump($a);//-4
$a = strcmp('あ','あ');
var_dump($a);//0
strcmpで文字列の数字の比較をする場合
例)
// -5200の方が小さいと出力の例2点-
//例)1
if(strcmp('5200',"621")> 0){
echo '5200方が大きい'."\n";
}elseif(strcmp('5200',"621")===0){
echo'等しい'."\n";
}else{
echo'5200の方が小さい'."\n";
}
//例)2
if(strcmp('5200',"521")> 0){
echo '5200方が大きい'."\n";
}elseif(strcmp('5200',"621")===0){
echo'等しい'."\n";
}else{
echo'5200の方が小さい'."\n";
}
上記例のように文字列の数字を比較するときは先頭文字から順番に数字を比較する。
例)1
"5200"と"621"の比較の為
5と6が比較される。
その結果621の方が大きく、5200の方が小さくなる
例)2
"5200"と"521"の比較の為
①5と5が比較される。
②1桁目で判断できない為2桁目を比較
2と2が比較される
③3桁目で0と1を比較し521の方が大きいと分かる
その結果521の方が大きく、5200の方が小さくなる
宇宙演算子でも同様にやってみた
strcmp()で比較していた内容を宇宙演算子で
例)
//上記例を宇宙演算子で書き換えた場合5200の方が大きくなる
//$nと$mには1の値が格納される。
//宇宙演算子は文字列比較時に文字列を値に変換している様子(ドキュメントからは読み取れなかった為推測)
$n = "5200"<=>"621";//1
return;
if($n > 0){
echo '5200の方が大きい'."\n";
}elseif($n===0){
echo'等しい'."\n";
}else{
echo'5200の方が小さい'."\n";
}
$m = "5200"<=>"521";//1
if($m> 0){
echo '5200の方が大きい'."\n";
}elseif($m ===0){
echo'等しい'."\n";
}else{
echo'5200の方が小さい'."\n";
}
どうやら宇宙演算子では比較の際に文字列の数値を数値へ変換して比較している様子。
その為5200が大きいが表示される。