【PHP】文字列の中に指定した文字があるかどうか、さらに置換

PHP PHP

【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" と出力


 

【関連記事】Python3〜文字列の置き換え〜replace translate maketrans

コメント