PHPでmb_substrを使って文字列を取得する

19/05/12 23:34:46     19/05/12 23:34:46

特に業務用のシステムを扱う際には文字列の処理が重要で、自由に文字列を取得する必要性のあるシステムも多いです。

そこで便利なコードの一つがmb_substrで、mb_substrを使用することで文字列の中から指定した部分を取得することが可能です。

mb_substrの使い方

mb_substrは文字列の一部を取得する関数で、引数は四つあります。第一引数が文字列(変数)、第二引数が文字列の開始位置、第三引数が文字列の終わり位置、第四引数が文字コードとなっています。

それではサンプルコードを紹介していきます。まずは第一引数と第二引数のみのパターンです。

<?php
$str = “abcde”;
echo mb_substr($str,1);
?>

上記を実行すると以下のようになります。

bcde

開始位置のみを1と指定したため、0から数えて1番目のbから順に出力されました。終わり位置を指定しないと文字列の最後まで出力されます。次に、第一引数~第三引数の文字列の終わりまでを指定したパターンです。

<?php
$str = "abcde";
echo mb_substr($str,1,3);
?>

上記のコードを実行すると、以下のように出力されます。

bcd

第三引数で終わりを3と指定しているので、文字列の3番目で出力は終わりました。次に、第四引数まで指定したパターンです。

<?php
$str = "あいうえお";
echo mb_substr($str,1,3,"UTF-8");
?>

このコードを実行すると、以下のように出力されます。

いうえ

第三引数までは先ほどの考えと同じで、第四引数でUTF-8を指定しています。これによって、日本語の文字列も取得することが可能になります。

またmb_substrと似たような形で文字列を取得できる関数もあるので、合わせてそちらも紹介しておきます。

substrの使い方

substrはmb_substrとほぼ同じですが、違いは第四引数があるかないかです。substrには第四引数はなくて、第一引数~第三引数までです。引数の内訳はmb_substrとまったく同じです。一応サンプルコードを紹介しておきます。

<?php
$str = “abcde”;
echo substr($str,1);
?>

これは第二引数までのパターンです。出力結果は「bcde」となります。次に第三引数まで指定するパターンです。

<?php
$str = "abcde";
echo substr($str,1,3);
?>

これも先ほどと同様に、「bcd」と出力されます。第四引数の文字コードを指定しない場合どちらを使っても変わらないのですが、文字数的にsubstrの方が少ないので、そちらを使うと良いかもしれません。

変数の中に日本語が入っているならmb_substrを使用した方が良いのかもしれませんが、そうでないならsubstrの方が書きやすいので使いやすいです。

substr_replaceの使い方

上では文字列の任意の部分を取得する方法を紹介しましたが、文字列の一部を操作することも可能です。substr_replaceはその名の通り、文字列の一部を置き換える関数になります。構文は以下です。

substr_replace(元の文字列,置換する文字列,開始位置[,範囲])

substr_replaceを使用したサンプルコードは以下です。

<?php
$str = "abcde";
echo substr_replace($str,"9",2,1);
?>

上記のコードを実行すると以下のように出力されます。

ab9de

0から数えて2番目のcが9に置き換えられました。また範囲は1を指定したので、置き換えられた文字数は1文字だけです。ポイントがあるとすればsubstr_replaceの使い方かどうかは微妙ですが、数字に置き換える際に文字列として指定することでしょう。

string型で文字列が入っている変数に対して置換を行っているので、数字に置き換える際は数字を文字列で指定する必要があります。

substr_countの使い方

substr_countは文字列の中で指定した文字が何回出現したのかをカウントする関数です。使い方は至ってシンプルで、構文は以下です。

substr_count(検索対象の文字列,検索する文字列)

引数は二つだけなので、上で紹介してきた文字列操作関数よりも簡単かもしれません。サンプルコードは以下です。

<?php
$str = "PHPの勉強を開始しました。";
echo substr_count($str,"P");
?>

上記のコードを実行すると、「2」と出力されます。

文字列を分割する

文字列の取得や簡単な操作は上記で解説した通りです。ここでもう一歩踏み込むと、文字列の分割も可能です。特に文字列分割に用がない方は知る必要がないのですが、使用機会がありそうな方はぜひ押さえておくと良いです。

とはいえ使用機会がなさそうな方であっても、知っておけば文字列操作のレパートリーが増える分理解も深まるでしょう。文字列の分割に使用する関数はwordwrapです。wordwrapは以下のような構文で使用します。

$変数名 = wordwrap(文字列, 分割する文字数, 分割する部分に入れる文字[, true/ false]);

まず第一引数は分割する対象となる文字列です。これについては上で紹介してきた関数と同じです。第二引数は分割する文字数です。何文字ごとに分割したいかを指定できます。

第三引数は分割部分に入れる文字です。どのような文字で分割するかを指定できます。分割だけでなく、<br/>や\nを指定することで改行も可能です。第四引数はtrue/falseで、trueなら必ず指定した文字数で分割されます。

falseの場合単語単位で分割するので、たとえば指定した文字数で単語の途中になる場合、その単語の前で分割します。wordwrapを使用したサンプルコードは以下です。

<?php
$longword = 'Do you know the word of Pneumonoultramicroscopicsilicovolcanoconiosis? This is name of lung disease.';
$words = wordwrap($longword, 30, '<br/>');
echo $words;
?>

このコードを実行すると、以下のように出力されます。

Do you know the word of
Pneumonoultramicroscopicsilicovolcanoconiosis?
This is name of lung disease.

30文字ごとに分割するように指定されていますが、一つの長い単語は30文字以上続いています。今回第四引数は指定しなかったのですが、仕様上デフォルトでは第四引数がfalseになっているので、第四引数を指定しないと単語は分割されません。

trueを指定すると以下のように単語の間でも分割されます。

<?php
$longword = 'Do you know the word of Pneumonoultramicroscopicsilicovolcanoconiosis? This is name of lung disease.';
$words = wordwrap($longword, 30, '<br/>', true);
echo $words;
?>

これを実行すると以下のようになります。

Do you know the word of
Pneumonoultramicroscopicsilico
volcanoconiosis? This is name
of lung disease.

単語の間でも分割されています。

以上文字列取得やその他文字列操作について解説しました。

文字列操作はあまり面白くないかもしれませんが、業務用のシステムでは基本になるので、押さえておくと役立つはずです。

人気記事

編集部おすすめ記事

この記事を読んだ人はこんな記事を読んでいます

案件探しやフリーランスになるための相談する

最新お役立ちコンテンツ一覧