Search

検索したいワードを入力してください

2019年01月22日

【PHP入門】PHPの文字列操作の関数まとめ10選

文字列操作の方法がわからず困っていませんか?PHPにおける文字列操作の色々な関数の紹介から実例まで、おすすめの文字列操作方法10選をまとめた永久保存版です。これからPHPを始める人も復習をしたい方も楽しめる内容となっていますので、ぜひ目を通してみてください

そもそも文字列操作ってなに?

まずPHPの関数について見る前に、プログラムにおける文字列操作とは何か、という点から見てみましょう。文字列というのはプログラムにおける文章のことで、文字列操作というのは文章をプログラムを使って変更したり情報を取得したりすることを指します。

この記事では実際の文字列操作の方法を、PHPのサンプルプログラムと合わせてご紹介します。

関数って一体なに?

プログラミングにおける関数とは、特定の処理を1つのグループにまとめた命令群のことを指します。また、関数にはプログラミング言語毎に特定の記述ルールがありますが、今回はPHPのルールを記述します。

関数はメソッドやファンクションなど、色々な名称で呼ばれることがあります。これらは厳密には同一のものでは無いのですが、多くの場合は関数の名称、と一括りで覚えてしまって問題ないでしょう。

関数の書き方

それでは関数の書き方についてご紹介します。関数は以下の3つの要素から構成されています。

1. 関数名
2. 引数(パラメーター)
3. 返り値(戻り値)


そしてPHPで関数を記述する場合、以下のように記述します。

strlen ( string $string ) : int

これを要素毎に分解していくと、以下のようになります。

関数名 ( 引数 ) : 返り値

PHPの文字列操作方法のまとめ

PHPには数多くの文字列操作を行う方法、関数が用意されています。そしてPHPで用意された関数を使うことで、文字列の長さの確認や結合、文字の置換などいろいろなことが簡単にできます。

以下のPHP公式関数リファレンスにすべての関数の一覧がありますが、確認したところ文字列操作に関する関数だけで100以上存在していました。

今回はその中でも最もおすすめな10の文字列操作方法についてご紹介します。

文字列の長さを確認しよう

それではまず文字列操作をする上で一番利用頻度が高い文字列の長さを取得する方法からご紹介します。この処理は文字列が空か確認する場合や、文字列の文字を1つづつ確認して処理する場合など、多くの場合に渡って使用されます。

文字列の長さの確認は、以下の2つの関数を使用することができます。

1. strlen ( string $string ) : int
2. mb_strlen ( string $str [, string $encoding = mb_internal_encoding() ] ) : int

文字列の長さを確認する2つの関数 : strlenとmb_strlen

strlen関数と、mb_strlen関数、似たような名前を持つ2つの文字列操作用の関数ですが、処理の結果はそれぞれ違いがあります。

strlen関数は引数に文字列を渡すことで、文字列に含まれるバイト数を取得することができます。そしてmb_strlen関数は引数に文字列を渡すことで、文字列に含まれる文字数を取得することができます。

そのため単純な文字カウントにはmb_strlen関数を、内部データを確認したい場合はstrlen関数を使いましょう。

strlenとmb_strlenのサンプル

それでは実際に文字列操作を行い、文字列の長さを取得してみましょう。

1. 文字列"abc"の場合。
strlen("abc"); -> 結果 : 3
mb_strlen("abc"); -> 結果 : 3

2. 文字列"あいう"の場合。
strlen("あいう"); -> 結果 : 6
mb_strlen("あいう"); -> 結果 : 3

3. 文字列"abcあいう"の場合。
strlen("abcあいう"); -> 結果 : 9
mb_strlen("abcあいう"); -> 結果 : 6

文字列操作の結果、strlenでは文字列のバイト数を、mb_strlenは実際に表示されている文字数をカウントしていることが分かります。

TIPS : マルチバイト関数について

今回mb_strlen以外にも、mb_というプレフィックスがついた関数を複数ご紹介しますが、このmb_とは一体何なのでしょうか?

実はmbはマルチバイトの略式で、mb_というプレフィックスがついた関数はマルチバイト文字列用の関数ということになります。

そのため、日本語などのマルチバイト文字列や、文字コードを指定する必要がある場合はmb_というプレフィックスがついた関数を使用するケースが多々あります。

PHPの文字列操作をマスターする上で、マルチバイトの対応はとても大切なことなので、ぜひ覚えましょう。

文字列の一部を取得しよう

次の文字列操作は文字列の一部を取得する方法をご紹介します。PHPでは文字列の一部を取得する関数が2つ用意されており、場合によって使い分ける必要があります。今回も同じような名前で、プレフィックスにmb_がついています。

1. substr ( string $string , int $start [, int $length ] ) : string
2. mb_substr ( string $str , int $start [, int $length = NULL [, string $encoding = mb_internal_encoding() ]] ) : string

文字列の一部を取得する2つの関数 : substrとmb_substr

これらのsubstr関数は2つとも文字列の一部を取得するための関数で、引数に全体の文字列、開始地点、終了地点の情報を渡すことで簡単に文字列の指定の部分の文字列を取得することができます。終了地点を指定しない場合は開始地点から文末まで取得できます。

また、mb_substrmb_のプレフィックスがついていることからすでにお分かりかも知れませんが、mb_substrはマルチバイトに対応したsubstr関数です。そのため開始地点は文字数の指定となります。

逆にsubstrでは開始地点の指定は文字数でなく、バイト数なのでご注意ください。

PHPの文字列操作はマルチバイト対応された関数としていない関数が両方存在していることが多くあります。そのため新しい文字列操作を試す際は、マルチバイト対応している関数が存在するかPHPの公式リファレンスをご確認することをおすすめします。

substrとmb_substrのサンプル

それでは実際に文字列操作を行い、文字列の一部を取得してみましょう。ちなみにプログラムでは基本的に1つ目のインデックスは0となっているため、開始地点を3と指定した場合、4文字目から表示されます。

1. 文字列"abcde"の場合。
substr("abcde", 3); -> 結果 : "de"
mb_substr("abcde", 3); -> 結果 : "de"

2. 文字列"あいうえお"の場合。
substr("あいうえお", 3); -> 結果 : "いうえお"
mb_substr("あいうえお", 3); -> 結果 : "えお"

上記のとおり、マルチバイト文字列の場合はmb_substrでないと期待している結果が表示されないことが分かります。

文字列内で指定した文字列が最初にいつ現れるか確認しよう

文字列の内容を確認する際、特定の文字列が文字列内に存在するか、かつその文字列が確認が必要な場合があります。そのような場合、PHPでは2つの関数、strposmb_strposを使用します。

1. strpos ( string $haystack , mixed $needle [, int $offset = 0 ] ) : int
2. mb_strpos ( string $haystack , string $needle [, int $offset = 0 [, string $encoding = mb_internal_encoding() ]] ) : int

文字列内を検索する2つの関数 : strposとmb_strpos

この関数では文字列$haystackの中で、$needle文字列が最初に現れる位置を返します。offset値が設定されている場合、offsetの地点から検索を開始します。

$needle文字列が$haystack内に存在しない場合はFALSEが返されます。

また、mb_というプレフィックスがついているmb_strposはマルチバイト関数となっており、結果が何文字目にあるかを返してくれます。

strposとmb_strposのサンプル

それでは実際に文字列内を検索するサンプルを動かしてみましょう。文字列が1文字目にある場合、1ではなく0が返されます。

1. 文字列"abcde"の場合。
strpos("abcde", "cd"); -> 結果 : 2
mb_strpos("abcde", "cd"); -> 結果 : 2

2. 文字列"あいうえお"の場合。
strpos("あいうえお", "うえ"); -> 結果 : 6
mb_strpos("あいうえお", "うえ"); -> 結果 : 2

他のマルチバイト関数同様、マルチバイト関数は文字数を、通常関数はバイト数を返しています。

文字列の空白を削除してみよう

文字列を使用する場合、不要な空白や改行が入り込んでしまうことが多々あります。PHPには文末の空白のような不要となった文字の削除をできる関数も用意されています。

文字列の先頭や末尾の空白や改行コード、記号などを機械的に削除したい場合、以下の3つの関数を使います。

1. trim ( string $str [, string $character_mask = " \t\n\r\0\x0B" ] ) : string
2. ltrim ( string $str [, string $character_mask ] ) : string
3. rtrim ( string $str [, string $character_mask ] ) : string

trim関数は両端の空白や改行、ltrimは左端の空白や改行、rtrimは右端の空白や改行を取り除くことができます。

trim、ltrimとrtrimのサンプル

trimltrimrtrimそれぞれでどのように空白が削除されるか見てみましょう。

1. 文字列" あ い う え お "の場合。
trim("  あ い う え お  "); -> 結果 : "あ い う え お"
ltrim("  あ い う え お  "); -> 結果 : "あ い う え お  "
rtrim("  あ い う え お  "); -> 結果 : "  あ い う え お"

trim系の関数を使う場合、端の空白のみ削除され、文字の間の空白は一切されません。また、$character_maskを指定する場合、空白などの代わりに指定した文字列が削除されます。

文字列を省略してみよう

ウェブサイトやアプリで文字列を表示する時、文字列が長すぎてUIから溢れてしまうことがあります。そんな問題を防止するために、文字列を任意の長さに丸めて省略する関数がPHPに用意されています。

1. mb_strimwidth ( string $str , int $start , int $width [, string $trimmarker = "" [, string $encoding = mb_internal_encoding() ]] ) : string

mbというプレフィックスから見えるとおり、マルチバイト対応の関数なので、$startに指定する数値はバイト数ではなく、文字数となっています。

また$trimmakerを設定することで、省略された文章の末尾に指定した文字列をつけることができます。

一点注意があり、第3引数の$widthで最終的な文字列の長さを設定できるのですが、ここで指定するのは文字数ではなくバイト数となっています。

mb_strimwidthのサンプル

それでは実際に以下の半角、全角文字列を丸めてみましょう。

1.mb_strimwidth("abcdefg", 2, 4, "..") -> 結果 : cd..
2.mb_strimwidth("あいうえお", 2, 4, "..") -> 結果 : う..
3.mb_strimwidth("abcdefg", 2, 10, "..") -> 結果 : cdefg

出力結果を見ると$widthはバイト数指定ですが、第2引数の$startは文字数でカウントしていることが分かります。また、指定した$width分文字列がない場合、文字列の省略は行われず、$trimmakerがつくこともありません。

配列を文字列として連結してみよう

PHPでは文字列の配列を連結して、1つの文字列に変換するimplodeという文字列操作用の関数が用意されています。

1. implode ( array $pieces ) : string

implodeのサンプル

それでは実際に配列を宣言し、implode関数を使用して文字列を連結してみましょう。

1. implode(array("これは", "配列", "です")); -> 結果 : これは配列です

implode関数を使用することで、無事配列が連結されて1つの文章になったのが分かります。またimplode関数の引数にarrayという関数を渡していますが、今回はこのarray関数を使うことで配列を作成しています。

文字列を配列に分解してみよう : 区切り文字編

それでは逆に1つの文字列を複数の文字列の配列に分解してみましょう。そのためにはexplodeという関数を使用します。

1. explode ( string $delimiter , string $string [, int $limit = PHP_INT_MAX ] ) : array

この関数は1つの文字列を$delimiterの値毎に区切って、配列として返してくれます。

explodeのサンプル

それでは実際にexlode関数を実行しましょう。

1. explode("_", "もともとは_ひとつの_文章です")); -> 結果 : "もともとは", "ひとつの", "文章です"

explode関数を使うことで、無事1つの文字列を3つに分解できました。また、このexplode関数を使用する場合は$delimiterに指定した文字列は削除されますのでご注意ください。

文字列を配列に分解してみよう : 文字数編

また、PHPには他にも文字列を分解する文字列操作の関数が存在します。文字数で文字列を分解するstr_split関数を使用することでも文字列を配列に分解できます。

1. str_split ( string $string [, int $split_length = 1 ] ) : array

str_splitのサンプル

それでは先程と同じ文字列を分解してみましょう。

1. str_split("もともとはひとつの文章です", 18)); -> 結果 : "もともとはひ", "とつの文章で", "す"

無事1つの文字列を分解することができました。ただしstr_splitで文字列のの長さを指定する場合は文字数ではなく、バイト数を指定するという点にご注意ください。

URLを分解してみよう

ここまで色々な文字列操作をご紹介しましたが、PHPには少々特殊な文字列の分解用の関数もあります。その1つがparse_urlです。これは今までの文字列操作とは違い、渡したurlを自動的に解析し、要素ごとに情報を分解してくれます。

1. parse_url ( string $url [, int $component = -1 ] ) : mixed

parse_urlのサンプル

こちらの関数に関しては、実際の出力結果を見ないと分かりづらいため、実際に文字列操作を行った結果をそのまま表示します。

PHPの配列はKey値とValue値から構成されており、今回の結果ではurlの要素と、その要素に該当するurlの値が出力されています。

入力内容
1. var_dump(parse_url("https://www.google.co.jp/"));
var_dumpは配列の情報を出力するための関数です。

出力結果
2. array(3) {
["scheme"]=>
string(5) "https"
["host"]=>
string(16) "www.google.co.jp"

["path"]=>
string(1) "/"
}

文字列操作の結果、schemehostなど、urlの要素毎に文字列が分解されていることが分かります。urlの情報を整理したい場合、また特定の要素のみ取得したい場合はparse_url関数を使用することで簡単に必要な情報のみを取得できます。

PHPはその性質上、urlや通信のデータを取扱うケースが多いため、このようなurlの操作もとても重要となっています。

数字をフォーマットしてみよう

それでは最後に数値に関する文字列操作をご紹介します。経理や数値の整理に必須な数字のフォーマットは、PHPでも関数が用意されています。PHPでは小数点の切り取りだけでなく、小数点や千位毎の区切りまで設定できるため、かなり自由な文字列操作が可能となっています。

1. number_format ( float $number , int $decimals = 0 , string $dec_point = "." , string $thousands_sep = "," ) : string

number_formatのサンプル

それでは実際に数値をフォーマットし、見やすく変換してみましょう。

1. number_format(1234567890.12345, 3, ".", ","); -> 結果 : 1,234,567,890.123

区切りが無いと分からない数値や、小数点が多すぎる場合も一瞬で理解しやすい数値へとフォーマットできました。

便利な関数が大量にあるPHPを使ってみよう

PHPは非常に多くの関数がデフォルトで定義されており、文字列操作に関する関数だけでもゆうに100以上の関数が用意されています。そのため、PHPの公式で定義されている関数を使うだけでも非常に多くのことができます。

興味を持たれた方はぜひこちらの公式マニュアルを見て、色々な面白い関数を試してみましょう。

【PR】多くの人がプログラミングを諦めてしまう理由をご存知ですか?



近年プログラミングを勉強する人が増えています。

プログラミング学習者の多くは独学から取り組もうとしますが、だいたい80%ほどは3ヶ月も続かずに諦めてしまいます。早い人は1日目で。

多くの人がプログラミングを独学しようとして諦める理由は、次の3つ。
●モチベーションが維持できない
●エラーの原因・解決方法が分からない
●どう学習すればよいか分からない

TechBoostというプログラミングスクールでは、みんなと一緒にプログラミングをするのでモチベーションの維持ができ、分からないことがあればマンツーマンで教えてくれ、徹底的に研究された初心者向けの教材が揃っています。

TechBoostを卒業後、実際にエンジニアとして転職した方もいるほど。

本気でプログラミングを学びたい方は、一度無料のカウンセリングでご相談ください。プログラミングを嫌いになる前に。

tech boostについて

オーダーメイド型の学習コンテンツを提供する「tech boost」 は、エンジニアのキャリア支援に特化したサービスを複数展開している株式会社Branding Engineerが運営しているプログラミングスクールです。最短3ヶ月間で、未経験から『プログラミングの基礎』、『実際に業務で必要となるスキル』、『今のトレンドとなっている知識』まで学べ、ご希望の方にはプロのキャリアアドバイザーによる就業支援を行うことができます。

tech boost卒業生インタビュー

tech boostの卒業生の声を聞きました。あなたがプログラミングを学びたい理由を、一度考えてみてください。
営業→Javaエンジニア→Rubyエンジニアと転向し、第一志望のFinTech企業で働く山下さん
元営業、ビジネスのわかるエンジニアを目指す菅原さん
サンフランシスコに交換留学し、シリコンバレーのVCでインターン中の梅本さん
予備校の営業から半年でエンジニア転職を果たした小田島さん

tech boostの口コミ



Related