【PHP】文字列の中に指定した文字があるかどうか
strpos()を使うと処理速度も速いようだ。他にもstrstr(),preg_mach()などがある。
とりあえず、strpos()の初歩的な使い方。
$a = "アイウエオ";
$b = "ウエ";
$xxx = strpos($a,$b);
echo $xxx; //6を出力
$xxx = strpos($a,"ア");
echo $xxx; //0を出力
//↑日本語だと返り値がイマイチ微妙。。
$a = "bowwowbowwow";
$xxx = strpos($a,"wow");
echo $xxx; //3を出力
探したい文字の開始位置が返り値となるようだ。探した文字がなければ、返り値はFALSE。
第3引数には探すときの文字列の開始位置を指定できる。
$aの中に$bが含まれていたら条件A、含まれていなければ条件Bとしたいときは、
if(stripos($a,$b) !== false){
条件A;
}else{
条件B;
}
さらに指定した文字の置換、str_replace()
$strings = "ド*ゥ**ビド*ゥバ*!*ドゥ**ビド*ゥバ!";
echo str_replace("*","",$strings);//ドゥビドゥバ!ドゥビドゥバ! と出力
引数に配列を使用することも可能↓
$before = array("東京","タワー","332.6");
$after = array("通天","閣","108");
$strings = "東京タワーは332.6m";
echo str_replace($before,$after,$strings);//通天閣は108m と出力
しかし、str_replace()には少しややこしい点もある‥例えば、
$before = array("a","b","c");
$after = array("b","c","d");
$strings = "abc";
echo str_replace($before,$after,$strings);//ddd と出力されてしまう。
本当は、”bcd”と出力したい‥。
その場合は、strtr()を使用する。
$before = array("a","b","c");
$after = array("b","c","d");
//置換前($before)をkeyに、置換後($after)を要素にした配列($trans)を作成する
for($x = 0;$x < count($before);$x++){
$trans[$before[$x]] = $after[$x];
}
print_r($trans)//Array([a] => b,[b] => c,[c] => d)
$strings = "abc";
echo strtr($strings,$trans);//"bcd" と出力
コメント