こんばんは、Webプログラマの篠田です。
あと、10回ほど寝るとお正月ですね。まだ、クリスマスも残していますが2016年の私の回は今回で終りとなります。
次回は「あけおめ」でスタートすることになりそうです。
さて、今回は「PHPの意外と知っているようで知っている??」シリーズと題して「文字列」の「分割」に関してご紹介していきます。
お使いのプログラムに非推奨・削除な関数いませんか?
現在稼働中のシステムの中に「split」関数が、絶賛分割中という方はいらっしゃいませんか?
今更ながらではありますが、「split」関数は、PHP5.3.0で非推奨になり、去年リリースされたPHP7では削除されました。
「split」関数が稼働中のシステムをPHP7に移行してしまうと「call to undefined function split()」のエラーの嵐に巻き込まれてしまいますので、移管は十分にご注意ください。
PHP初心者あるあるですが、Google先生に「PHP 分割」などで調べて古い記事に、さらっと「split」関数が利用されているプログラムソースが公開されていることがありますので、間違って爆弾付きのソースコードをコピー&ペーストして時間の浪費をしないようにご注意ください。
正規表現嫌いの方におすすめな分割関数
まずは「正規表現」というキーワードを聞いて「うげぇ」と反射的に漏らしてしまった方はいませんか?
分割関数の中に「preg_split」関数という、正規表現を使用して文字列を分割するという関数があります。
「preg_split」関数は、第1引数に正規表現によるマッチパターンを指定することで、文字列を分割した配列を返してくれる便利な関数です。
■「preg_split」関数を使った分割方法例
1 2 3 4 5 |
<?php $iataCode = "KIX,HND,NRT,ITM"; $iataList = preg_split("/,/", $iataCode); var_dump($iataList); |
■出力結果
1 |
array(4) { [0]=> string(3) "KIX" [1]=> string(3) "HND" [2]=> string(3) "NRT" [3]=> string(3) "ITM" } |
CSVなどでよく見かける「カンマ区切り」の分割をしてみました。
ただ、正規表現を使いましたが「カンマ区切り」などの簡単な分割に正規表現を利用するというのは何だか大げさな気がするのは私だけでしょうか??
このような単純な条件で文字列の分割をする場合は、「お手軽+正規表現なし」で使える「explode」関数を利用するのが良いです。
先程の例を「explode」関数を使って再現してみます。
■「explode」関数を使った分割方法例
1 2 3 4 5 |
<?php $iataCode = "KIX,HND,NRT,ITM"; $iataList = explode(",", $iataCode); var_dump($iataList); |
■出力結果
1 |
array(4) { [0]=> string(3) "KIX" [1]=> string(3) "HND" [2]=> string(3) "NRT" [3]=> string(3) "ITM" } |
ぱっと見た感じではあまり変わっていませんが、「正規表現を気にしなくていい」というのは、正規表現アレルギー気味の方には朗報ではないでしょうか??
また、「preg_split」関数は正規表現処理を行う分、正規表現を利用しない「explode」関数の方が速いという特徴もあります。
※短い文字列の分割では、目に見えての速度の違いはありません。
まとめ
PHPの分割処理は、利用する頻度が高い処理の1つです。
こういった使用頻度の高い関数で頭を悩ますのは効率もよくありません。
1つの考え方として「正規表現あり分割=preg_split」「正規表現なし分割=explode」として使い分けるとプログラムソースも分かりやすく、効率良く書けるかもしれません。
次回は、「『分割』のあとは『結合』でしょ!」ということで配列の結合のご紹介をしたいと思います。
では、よいクリスマスを!