本記事ではPHPで文字数をカウントする方法について解説します。
「文字数をカウントしようとしたけど、正しい文字数が表示されない…」
そんな経験をした方も多いのではないでしょうか?
今回で、正しい文字数のカウントの仕方を学んでいきましょう。
PHPで文字数をカウントするには?
PHPで文字数をカウントする方法について解説します。
次の2つの関数を使った方法を順番に説明していきます。
- strlenを使う
- mb_strlenを使う
初心者がつまずきがちな日本語の文字数のカウント方法についても解説していきます。
なお、今回はPHPの関数を主に使っていきますので、「関数って何?」という方は、PHP基礎編8:頻繁に使う処理は関数としてまとめようを先にお読みいただけると幸いです。
1)strlenを使う
最初にstrlen関数を使った文字数のカウント方法を解説します。
strlenの使い方はシンプルです。
○コード例
<?php $str = "Apple"; echo(strlen($str)); ?>
○実行結果
上記のコードでは「Apple」の文字数をstrlen関数でカウントしています。
このようにstrlen関数では文字列を指定するだけで、その文字列の文字数をカウントすることが可能です。
○コード例
<?php $str = "1234"; echo(strlen($str)); ?>
○実行結果

上記のように、数値であっても同じようにstrlenは長さを返します。
2)mb_strlenを使う
strlen関数には1つ注意点があります。
strlenは厳密に言うと文字数ではなく、「バイト数」をカウントしているのです。
半角のアルファベットは1つの文字=1バイトなので、文字列が全部半角のアルファベットで構成されているなら、strlenでも問題なく文字数をカウントできます。
しかし、次のように日本語が紛れていると正しくカウントできません。
○コード例
<?php $str = "あいうえお"; echo(strlen($str)); ?>
○実行結果

ひらがなは1バイトではないため、strlenを使うとズレが発生してしまいます。
日本語のようなマルチバイト(2バイト以上のもの)が含まれた文字列をカウントする場合は、mb_strlenを使います。
○コード例
<?php $str = "あいうえお"; echo(mb_strlen($str)); ?>
○実行結果

上記のようにmb_strlenを使うことで、日本語でも正しくカウントできるようになりました。
PHPで文字数に関する操作を行う方法
PHPで文字数をカウントしたり指定文字数で分割したりする方法についてまとめました。
以下の順に従って解説していきます。
- 文字列を指定文字数の長さにする
- 指定文字数で丸めて語尾に追加する
- 文字列を分割する
- 文字列を特定文字数で分割する
- 文字列の出現数をカウントする
1)文字列を指定文字数の長さにする
まず、文字列を指定文字数の長さに区切る方法を解説します。
文字列を区切る場合はmb_strimwidth関数が便利です。
○コード例
<?php $str = "Apple"; echo mb_strimwidth($str, 0, 3); ?>
○実行結果

mb_strimwidthの第二、三引数に「どこからどこまでか」を指定することで、文字列からその箇所のみを取り出すことが可能です。
上記ではインデックス番号が0から3までの文字列を取り出しているため「App」と表示されています。
(インデックスは基本的に1からではなく0からカウントします。)
2)指定文字数で丸めて語尾に追加する
続いて、文字列を指定した文字数で丸めてかつ、語尾に「…」を追加する方法を解説します。
○コード例
<?php $str = "Apple"; echo mb_strimwidth($str, 0, 4, "…"); ?>
○実行結果

mb_strimwidth関数の第四引数に「…」を指定することで、文字列を指定文字数で丸めた後に「…」を追加することができます。
先程は「0から3」でしたが、今回は「…」も含めるため「0から4」と指定しています。
3)文字列を分割する
続いて、文字列を分割する方法について解説します。
文字列を分割する場合はexplode関数を使うことが多いです。
○コード例
<?php $str = "Apple,Banana,Melon"; $data = explode(",",$str); echo $data[0]."\n"; echo $data[1]."\n"; echo $data[2]."\n"; ?>
○実行結果

explode関数の第一引数に「,」を指定することで「,」ごとに文字列を区切ることができます。
区切られた文字列は配列として格納されます。
4)文字列を特定文字数で分割する
続いて、文字列を特定の文字数で分割する方法について解説します。
特定の文字数ごとに分割したい場合は、str_split関数を使います。
○コード例
<?php $str = "Hello World"; $data = str_split($str, 3); print_r($data); ?>
○実行結果

str_split関数の第二引数に「3」を指定することで、3つごとに文字列を区切ることが可能です。
5)文字列の出現数をカウントする
最後に、特定の文字列の出現数をカウントする方法を紹介します。
出現数をカウントする場合は、substr_count関数を使います。
○コード例
<?php $str = "Apple,Banana,Melon,Apple,Apple"; $data = "Apple"; echo substr_count($str, $data); ?>
○実行結果

上記ではsubstr_count関数によって「Apple」の数をカウントしています。
第一引数にカウントしたい文字列を指定することで、その文字列の数をカウントすることが可能です。
まとめ
本記事ではPHPで文字数をカウントする方法について解説しました。
PHPで文字数をカウントするのは難しくはありません。
ただ、日本語をカウントすると正しい文字数が表示されない可能性があるので、必ずmb_strlenを使うようにしましょう。
なお、文字数ではなく配列の個数をカウントするやり方に関しては、PHP基礎編10:混乱しやすい配列の要素の個数を数えるのにはcountがオススメにまとめてありますので参考にしてください。
コメント