前回は文字列を表示する基礎として、文字列を囲むクオート記号とヒアドキュメントについてお話ししました。
今回はそれを踏まえて、文字列を操作するメソッドについて解説していきます。
mb_〇〇はマルチバイト対応
メソッドをご紹介する前に1つだけ説明しておきます。
メソッド名の前に「mb_」の文字がある場合、「mb_」が無い同名メソッドも存在します。
例えばmb_strlen()はstrlen()メソッドも存在するということです。
ただ「mb_〇〇」はマルチバイトに対応しているという点しか違いがなく、日本語環境で使用する分にはこちらを覚えておくだけで事足りますので、「mb_」が無いバージョンに関しては紹介しません。
文字列の長さを返すmb_strlen()
mb_strlen()は検査対象の文字列と指定の文字エンコーディングを引数に取り、文字列の長さ(int)を返すメソッド。以下は公式ドキュメントの説明文です。
mb_strlen ( string
$str
[, string$encoding
= mb_internal_encoding() ] ) : int
string型の$str(変数でもただの文字列でもかまいません)を引数に取り、string型の省略可能な引数$encodingがあり、戻り値はint型であることが分かります。
文字エンコーディングを調べるmb_internal_encoding()
mb_strlen()の第二引数(文字エンコーディング)はmb_internal_encoding()で事前に指定しておけばそれ以降は自動的に適用されるので、ここでは省略されることが多いでしょう。
ちなみに、引数無しでこの関数を実行すると現在の文字エンコーディングを返します。返ってきた文字エンコーディングでよければこの関数は使用する必要がありません。
echo mb_internal_encoding(); //UTF-8
文字エンコーディングを指定して関数を使用するとこんな感じになります。
mb_internal_encoding("UTF-8");
$str="今日のごはんはハンバーグがいいな";
echo mb_strlen($str);
//16
このように文字数がint型で返ります。
指定した文字の位置を検索するmb_strpos()
mb_strpos()はある文字列から検索対象とする文字(列)の位置を検索し、その位置を返すメソッド。
mb_strpos ( string
$haystack
, string$needle
[, int$offset
= 0 [, string$encoding
= mb_internal_encoding() ]] ) : int
$str="たったひとつの真実見抜く、見た目は子供、頭脳は大人、その名は名探偵コナン!";
echo mb_strpos($str,"子供");
//17
上の例では$strから"子供"という文字列を検索しています。検索した文字が発見されると$strの中の"子供"の出現位置をint型で返します。$strの中で"子供"という単語は、$strの18文字目から始まるという意味です。
$strの最初の"た"を検索した場合、戻り値は0です。
検索する文字列が見つからない場合はFalseを返しますが、boolean型は上の例のようにそのままechoでは表示できないので注意しましょう。
$str="たったひとつの真実見抜く、見た目は子供、頭脳は大人、その名は名探偵コナン!";
$ans=mb_strpos($str,"ハンバーグ");
if($ans==false){echo "見当たりません";}
//見当たりません
文字列の大文字小文字を変換する4つのメソッド
- 文字列の全てを大文字から小文字に変換する→strtolower()
- 文字列の全てを小文字から大文字に変換する→strtoupper()
- 文字列の最初の文字だけ大文字にする→ucfirst()
- 単語単位で最初の文字を大文字にする→ucwords()
をそれぞれ使います。他にも種類はありますが、使用頻度の高そうなものはこの4種ではないでしょうか。
$str="Today, I'm gonna talk about PHP.";
echo strtolower($str); //today, i'm gonna talk about php.
echo strtoupper($str); //TODAY, I'M GONNA TALK ABOUT PHP.
echo ucfirst($str); //Today, I'm gonna talk about PHP.
echo ucwords($str); //Today, I'm Gonna Talk About PHP.
文字列を指定文字で分割するexplode()
explode()は区切り文字、文字列を受け取り、区切り文字で分割された文字列の配列を返すメソッド。
explode ( string
$delimiter
, string$string
[, int$limit
= PHP_INT_MAX ] ) : array
$str="たったひとつの真実見抜く、見た目は子供、頭脳は大人、その名は名探偵コナン!";
$ans=explode("、",$str);
print_r($ans);
//Array ( [0] => たったひとつの真実見抜く [1] => 見た目は子供 [2] => 頭脳は大人 [3] => その名は名探偵コナン! )
似た名前のメソッドでimplode()があって何かと混同しやすいのですが、implode()は配列を1つの文字列に結合するメソッド、explode()は文字列を分割して配列にするメソッドです。
implode()は配列、explode()は文字列に使うと覚えておきましょう。
ちなみに第3引数は分割された文字列の最大数(言い換えると配列の項目数)。指定するとそれ以上は分割されません。初期値(指定なし)はPHPのintの最大値です。
echo PHP_INT_MAX;
で調べてみてください。
文字列から1部分を取り出すmb_substr()
mb_substr()は文字列から開始位置と取り出す文字数を指定し、その部分文字列を取り出すメソッド。
mb_substr ( string
$str
, int$start
[, int$length
= NULL [, string$encoding
= mb_internal_encoding() ]] ) : string
$str="この間貸した10円返して";
echo mb_substr($str,6,3); //文字列の6文字目から3文字取り出す
//10円
第3引数(取り出す文字数)は省略でき、省略した場合は元の文字列の最後まで含まれます。
$str="この間貸した10円返して";
echo mb_substr($str,6);
//10円返して
文字列を置き換えるstr_replace()
特定の部分文字列を別の文字で置き換えるにはstr_replace()を使用します。
str_replace ( mixed
$search
, mixed$replace
, mixed$subject
[, int&$count
] ) : mixedこの関数は、
subject
の中のsearch
を全てreplace
に置換します。
$str="とにかく今日はハンバーグの口なんだ";
echo str_replace("ハンバーグ","コロッケ",$str);
//とにかく今日はコロッケの口なんだ
省略可能な第4引数は置き換えられた文字列の個数が格納される変数で、変数名は自由です。呼び出し時点では第4引数の変数の中身は空だということだけ注意しておいてください。
$str="ハンバーグハンバーグハンバーグ、とにかくハンバーグ!";
echo str_replace("ハンバーグ","コロッケ",$str,$cnt);
//コロッケコロッケコロッケ、とにかくコロッケ!
echo "${cnt}個のハンバーグが置き換えられました";
//4個のハンバーグが置き換えられました
文字列の全角、半角を変換するmb_convert_kana()
全角スペース、半角カナ、全角数字などの全角/半角を変換するにはmb_convert_kana()を使います。
mb_convert_kana ( string
$str
[, string$option
= "KV" [, string$encoding
= mb_internal_encoding() ]] ) : string文字列
str
に関して「半角」-「全角」変換を行います。 この関数は、日本語のみで使用可能です。
mb_convert_kana()のオプション
公式の説明文にある第2引数$optionですが、この位置にアルファベットで機能を指定することで色々な変換が行えます。今回は種類が多いので僕が普段使用しているものだけご紹介しますが、"KVsa"程度で十分かもしれません。その他は公式ドキュメントをご確認ください。
オプション文字 | 機能 |
---|---|
r | 全角アルファベットを半角にする |
n | 全角数字を半角にする |
a | 全角英数字を半角にする |
s | 全角スペースを半角にする |
K | 半角カタカナを全角にする |
V | 濁点が付いた文字(カ" など)を1文字に変換 |
$str="僕が1番好きなハンバーグは英語でhamburger steakです";
echo mb_convert_kana("$str","KVsa");
//僕が1番好きなハンバーグは英語でhamburger steakです
最近はほとんど見かけなくなった半角カナや全角スペースですが、もしそういった文字を使う人がいたとしてもこれで静かに矯正できます(笑)
まだまだある文字列メソッド
今回紹介した文字列メソッドはどれも基本的なものでしか無く、さらにある程度説明を端折った部分もあります。例えばstr_replace()は配列を受け取って複数の入れ替えを1度に行えますが、そういった詳細までは説明していません。
もし「こんな機能無いかな」と思ったらとりあえずざっくりとした言葉でもググってみることをオススメします。もしかしたらそれは文字列メソッドとしてではなく、例えば配列のメソッドとして登録されているものかもしれません。
メソッドの詳細が知りたければ公式ドキュメントがやはり一番確実です。左上の検索窓にメソッド名を入れれば説明が読めます。今回引用した説明の部分だけでも目を通してみると新たな発見があるかもしれません。