【PHP】文字列を1文字ずつで配列に分解する
文字列を1文字ずつ分解をして配列化したい時、「str_split」を使えばできるとあったので使用してみれば「マルチバイト非対応」・・・orz
なので正規表現を使って分解してみました。
1文字ずつの分解
まずは1文字ずつの分解です。<? $subject = "こんにちは、世界"; $result = preg_split("//u" , $text, -1, PREG_SPLIT_NO_EMPTY); var_dump($result);//の後に「u」を付けてマルチバイトに対応しております。
ただ、このままだと3文字ずつ分解したいとかの場合対応出来ない・・・
指定文字数ずつの分解
こちらはfunction化して指定された文字数毎に分解を行うように致しました。なお、余った文字も返すようになっております。
例:こんにちは → 「こんに」、「ちは」となる
余りを返さないようにするには三行目のパターン内の1を$lengthに入れ替える出来ます。
<?php /** * 文字列分解関数 * * @param string $subject 分解対象の文字列 * @param integer $subject 分解する文字数 * * @return array $temp 指定された文字数毎に区切った文字数を配列に入れて返す */ function mb_str_split($subject, $length = 1){ // 正規表現でマッチするものを取得 preg_match_all("/.{1,$length}/u", $subject, $match, PREG_OFFSET_CAPTURE, 0); $temp = array(); foreach($match[0] as $value){ // マッチした正規表現を返り値用配列に挿入 $temp[] = $value[0]; } return $temp; } $text = "こんにちは、世界"; $result = mb_str_split($text); var_dump($result);
使う機会は少ないですが、ないとないで困ってしまう機能ですね。
一々、関数を自作するのも手間なのでメモ。
«前の記事:【HTML5】デスクトップ通知が出来る「Notification」【MySQL】「Got error 28 from storage engine」の対処方法:次の記事»