PHPのstr_splitにマルチバイト版がなかったので書いた。
<?php /** * mb_str_split * str_splitのマルチバイト版 * * @access public * @param string $string 分割する文字列 * @param int $split_length 分割後の文字数 * @return array $retAry 分割後の配列 * @throws $split_lengthの値が0以下の場合Warning発生 * ※str_split準拠 */ function mb_str_split($string, $split_length = 1){ // 0以下が指定された場合Warningを発生させる if($split_length <= 0){ trigger_error("mb_str_split(): The length of each segment must be greater than zero", E_USER_WARNING); } // 文字列を配列に分解 $aryString = preg_split("//u", $string, -1, PREG_SPLIT_NO_EMPTY); // 文字数の指定がない場合、配列の要素数が0の場合はこのまま返す if($split_length === 1 || count($aryString) === 0){ return $aryString; } // 引数の文字列毎に配列に詰め直す $tmpVal = ""; foreach($aryString as $key => $value){ if(($key + 1) % $split_length !== 0){ $tmpVal = $tmpVal.$value; }else{ $retAry[] = $tmpVal.$value; $tmpVal = ""; } } // 余りの文字列があれば配列に足す if($tmpVal !== ""){ $retAry[] = $tmpVal; } return $retAry; } var_dump(mb_str_split("吾輩は猫である。名前はまだ無い。")); var_dump(mb_str_split("This is a pen.")); var_dump(mb_str_split("吾輩は猫である。名前はまだ無い。。", 3)); var_dump(mb_str_split("This is a pen.", 3));