【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);

使う機会は少ないですが、ないとないで困ってしまう機能ですね。
一々、関数を自作するのも手間なのでメモ。


コメントを残す