PHPで文字列操作まとめ(連結 / 置換 / 分割 / 検索/ 含むか判定)

PHP

PHPで文字列を操作するときの使い方をまとめてみました。
単純に文字列を結合する方法や下記の関数の使い方について書いています。

– str_replace
– explode
– strpos
– substr
– mb_substr

記載しているコードの検証はPHPのバージョン8で行いました。

文字列を連結する

PHPで文字列を結合する時にはドット(.)を使用します。
このように、文字列結合すると「テスト」と「文字列!!」が結合されて、echoを使用して「テスト文字列!!」が表示されます。

<?php
echo 'テスト' . '文字列!!'; // 結果「テスト文字列!!」

変数を含めて、結合することもできます。
下記では、「りんご」を$fruit変数に格納して、その後に「は赤い色です。」と結合しています。
結果として「りんごは赤い色です。」になります。

<?php
$fruit = 'りんご';
echo $fruit . 'は赤い色です。'; // 結果「りんごは赤い色です。」

また、文字列を連結するときに、変数に結果を格納していくことも可能です。
ドットとイコール(.=)を使って、変数に結合しながら代入できます。

<?php
$outputString = 'あるところに、';
$outputString .= 'おじいさんとおばあさんが';
$outputString .= 'いました。';

echo $outputString; // 結果「あるところに、おじいさんとおばあさんがいました。」

左側の変数に右側の文字列が連結されて、格納されていきます。
最初は普通に代入していますが、2行目・3行目はドットとイコールを使って、最初の変数に連結代入している形になります。
結果として「あるところに、おじいさんとおばあさんがいました。」となります。

文字列を置換する

文字列を置換する時には、str_replace関数を使用します。
関数に渡す内容として、「第1引数に探したい値」・「第2引数に置換する値」・「第3引数に置換対象の文字列」を指定します。

<?php
echo str_replace('フルーツ', 'ぶどう', 'フルーツが好きだ'); // 結果「ぶどうが好きだ」

上記だと「フルーツ」が探す値で、「ぶどう」が置換する値です、置換の対象の文字列が「フルーツが好きだ」になります。
置換対象の文字列の「フルーツ」の箇所が置換されて、結果として「ぶどうが好きだ」になります。

置換対象に置換したい文字列が複数あった場合は複数置換されます。

<?php
$search = 'コーヒー';
$replace = 'コーラ';
$target = 'コーヒーを飲みたいコーヒーコーヒー!';
echo str_replace($search, $replace, $target); // 結果「コーラを飲みたいコーラコーラ!」

今回は文字列を全部変数に入れて、str_replace関数に渡してみました。
上記だと、「コーヒー」がたくさん使われていますが、全て「コーラ」に置換されます。
結果として、「コーラを飲みたいコーラコーラ!」となります。

複数置換したい場合は、配列として指定することも可能です。

<?php                                                                                                                                                                                                        
$search = ['おじいさん', 'おばあさん'];
$replace = ['勇者', 'スライム'];
$target = 'ある所に、おじいさんとおばあさんがいました。おじいさんは山へ芝刈りに...';
echo str_replace($search, $replace, $target); // 結果「ある所に、勇者とスライムがいました。勇者は山へ芝刈りに...」

このように「検索する文字列」と「置換する文字列」を複数指定することが可能です。
配列要素の順番に検索と置換が行われます。
上記の場合だと、結果として「ある所に、勇者とスライムがいました。勇者は山へ芝刈りに…」となります。

str_replace関数の公式ドキュメントはこちらです。

文字列を分割する

文字列を分割する時には、explode関数を使います。
explode関数は、対象の文字列を区切り文字で分割して、配列に入れてくれる関数です。

第1引数に「区切るための文字」、第2引数に「分割対象の文字列」を入れます。

<?php
$result = explode('は','猫は動物で猫は可愛いです。');
var_dump($result);

区切るための文字として「は」を入れて、対象の文字列として「猫は動物で猫は可愛いです。」を指定しました。
そして、それをvar_dump関数で出力しています。出力結果を確認すると、下記のようになりました。

array(3) {
  [0]=>
  string(3) "猫"
  [1]=>
  string(12) "動物で猫"
  [2]=>
  string(18) "可愛いです。"
}

結果が配列に入っています。
「は」を区切り文字に指定したので、そこで区切られました。区切った後の結果が配列に入っています。
「猫」だけを取り出したい場合は、$result[0]のようにするとアクセスできます。

explode関数の公式ドキュメントはこちらです。

文字列の位置を検索する

指定した文字列から、対象文字列の位置を検索するにはstrpos関数を使用します。
第1引数に「検索対象の文字列」、第2引数に「検索文字列」を指定します。
返り値として対象の文字列の位置が数値で返ってきます。

<?php
echo strpos('This is a pen', 'a'); // 結果「8」になる

上記のように指定すると、第2引数で指定した「a」の位置が検索され、検索対象文字列の先頭から調べてくれます。
文字列の位置は0から始まり、スペースを含んで数えるので、「a」の位置である「8」(数値)が返ってきます。

検索文字列が対象に存在しない場合は、論理値のfalseが返ってきます。

strpos関数の公式ドキュメントはこちらです。

文字列を含むか判定する

文字列を含んでいるか判定する場合、先ほどのstrpos関数が使用できます。
strstr関数も使えますが、strstrの公式ドキュメントにある通り、メモリの消費量も少ないためstrpos関数の使用が推奨されています。

<?php
$target = 'This is a apple';
$result1 = strpos($target, 'abc');
if ($result1 !== false){
    echo "result1:検索文字が含まれます。";
}

$result2 = strpos($target, 'ap');
if ($result2 !== false){
    echo "result2:検索文字が含まれます。";
}

先ほど、挙動を説明した通り、存在しない場合は論理のfalseが返ってきます。

$result1の検索時には、 検索文字列として「abc」を使用しているので、対象に存在しません。
falseが返ってくるので、最初のif文は通らずに何も表示されません。

$result2の検索時には、検索文字列として「ap」を使用しています。
対象に存在するため、数値が返ってきてif文の中を通ります。
なので、このコードを実行した時には「result2:検索文字が含まれます。」が表示されます。

文字列を切り出す

文字列を切り出す時には、substr関数とmb_substr関数が使えます。

どちらの関数も同じように使えますが、mb_substr関数はマルチバイト対応の関数になります。
日本語を扱う場合はmb_substr関数を使用すると良いです。

substr関数から使用してみます。
第1引数に「切り出し対象の文字列」、第2引数に「切り出し開始位置」、第3引数に「切り出す文字数」を指定します。

<?php
echo substr('apple grape orange', 3, 5); // 結果「le gr」

上記の例では、対象の文字列の3番目から5文字切り出すということになります。
切り出し開始位置は0番目から数えます。
3番目が「l」になって、そこから5文字なので、スペースも含めて「le gr」が出力される結果となります。

mb_substr関数を使用してみます。
引数の指定方法は同様になります。

<?php
echo mb_substr('ラーメンとお寿司!!!', 5, 3); // 結果「お寿司」

同じように0番目から数えて、5番目が「お」なので、そこから3文字切り出します。
結果として「お寿司」になります。

substr関数の公式ドキュメントはこちらです。
mb_substr関数の公式ドキュメントはこちらです。

変数を文字列に埋めるときに気をつけること

変数の値を出力するときに文字列に埋めることがあります。
シングルクォーテーションとダブルクォーテーションによる文字列の作成方法には違いがあります。

シングルクォーテーションは渡した文字列を単純に文字列として扱います。

<?php                                                                                                                                                                                                
$apple = 'りんご';
$test = 'フルーツでは「{$apple}」が好きです\n';
echo $test; // 結果「フルーツでは「{$apple}」が好きです\n」

上記のように文字列を出力すると、変数が展開されず、改行コードも効きません。
結果として、そのまま「フルーツでは「{$apple}」が好きです\n」」が出力されます。

ダブルクォーテーションは変数を文字列の中に入れると、変数の内容が展開されます。
また、改行コード(\n)のような特殊な文字も変換されて扱われます。
先ほどと同じ内容で、ダブルクォーテーションで囲んで試してみます。

<?php                                                                                                                                                                                                
$apple = 'りんご';
$test = "フルーツでは「{$apple}」が好きです\n";
echo $test; // 結果「フルーツでは「りんご」が好きです」

上記のように、ダブルクォーテーションで囲むと、変数が展開されて改行コードも効くようになります。
出力結果として、「フルーツでは「りんご」が好きです(改行)」となります。

コメント

タイトルとURLをコピーしました