PHPでマルチバイト(日本語)文字列を逆順(反転)にソート・並び替える mb_strrev ?

Pocket

phpて、mb_strrevという関数が無いかなーと、探しました。
先日数百万件のデータを照合しなければならないことがありまして、その際にPHPのマニュアルを見たりしました。

作業の中で日本語の文章というか文字列を逆順にする必要があり、誰かサンプルを書いてないかなぁと思ってGoogle先生に相談したところこちらのページが検索にヒットしました。

ところが、ちょっと長い。9行もある。
たかが、マルチバイトの文字列を逆さに、逆順にソートするだけでこの長さは頂けません。
PHPならもっとさっくりいけるんじゃないかなぁとちょいちょい調べた結果がこちら。

PHPでマルチバイト(日本語)文字列を逆順(反転)にソート・並び替える極めて単純な方法


$str = 'あいうえお';
$array = preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);
$strrev = implode(array_reverse($array));

うん。すっきりですね!!
$strrevをechoすると、’おえういあ’という、逆順にソートされた文字列が出力されます。

シングルバイトだと、strrevという関数で、一文字ずつ配列にしたりできます。
オプションを使えば、3文字ずつ切り取って配列にするということもできるのですが、マルチバイトに対応したmb_strrevみたいな関数はなく、日本語に対応した専用のビルトイン関数は存在しません。

そんなことが書いてあるマニュアルページのUser Contributed Notesの部分に、上記preg_splitを使ったサンプルがありました。

PHPは言語としてあれだこれだと批判されることがおおいですが、こうしてさっくり書けるところが好きだったりします。

というわけで、処理が必要になった方のために、こちらのページとほぼ同じタイトルでエントリーしておきます。
SEOで勝ちたいですね。冗長なコードを参考にする方が少なくなる為に。

インタラクティブモードで、文字列を逆順、反転、ソートする

最後におまけで、対話モード(インタラクティブモードで)実際に上述のコードを実行した様子のスクリーンショットを添付します。

というか、たったの1行で書けますね。for文を書いて冗長に記述する必要はありません。
ちょっとしたコードで動作確認したい場合はインタラクティブモードがお手軽ですが、初心者の方だとご存知ないかもしれませんね。
是非ご活用ください。

って、なんかターミナルの設定を変更して、マシン名とか見えないようにしたのに、なんか、ウィンドウの上に名前出ちゃってるけど、ま、いっか。

まとめ

PHPのWebマニュアルページでは、一般ユーザーのcontributeがたくさんあり、参考になるものがあります。
英語だからわかりづらいと敬遠せずに、読み込むと、様々な関数の利用方法を知ることが出来、勉強になるのでおすすめです。

Pocket