トリッキーコードネット トップへ戻る   C/C++, Java, Perl, PHP, JavaScript, アルゴリズム, ショートコーディング, IOCCCコードの解説, 等々

サイト情報

トリッキーなコード

7行プログラミング

物凄いコード集

アルゴリズム

データ構造

C/C++な話題

コードサンプル

ツール/環境構築

開発ノウハウ 等

ネタ/ジョーク集

おススメ書籍/サイト

サイトTOP >> コードサンプル >> マルチバイト文字列の分解について

マルチバイト文字列を指定文字数毎に分解

例えば、
文字列を1文字ずつ分解する場合は、
$str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$ret = str_split($str);

putValue($ret);
の様にします。 (※putValue()に関しては、ここで取り上げたものを使用しています^^;) 結果)
Array ( [0] => A [1] => B [2] => C [3] => D [4] => E [5] => F [6] => G [7] => H [8] => I [9] => J [10] => K [11] => L [12] => M [13] => N [14] => O [15] => P [16] => Q [17] => R [18] => S [19] => T [20] => U [21] => V [22] => W [23] => X [24] => Y [25] => Z )
また、文字列を3文字ずつで分解する場合は、
$str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$ret = str_split($str, 3);

putValue($ret);
の様にします。 結果)
Array ( [0] => ABC [1] => DEF [2] => GHI [3] => JKL [4] => MNO [5] => PQR [6] => STU [7] => VWX [8] => YZ )
でも、この便利なstr_split()関数は、マルチバイトに対応していないんです (/TДT)アゥゥ (しかも、mb_str_split() なる関数も存在しません・・・) そこで、mb_str_split()関数を自作したのが以下の通り。
function mb_str_split($str, $split_len = 1) {

    mb_internal_encoding('UTF-8');
    mb_regex_encoding('UTF-8');

    if ($split_len <= 0) {
        $split_len = 1;
    }

    $strlen = mb_strlen($str, 'UTF-8');
    $ret    = array();

    for ($i = 0; $i < $strlen; $i += $split_len) {
        $ret[ ] = mb_substr($str, $i, $split_len);
    }
    return $ret;
}
(※ PHPマニュアルに載ってたソースをちょっぴり改良しただけ っていうのは内緒www)

コード例

$debug_mode = false;

$str  = 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん';
$ret1 = mb_str_split($str);
$ret2 = mb_str_split($str, 3);

putValue($ret1);
putValue($ret2);

function mb_str_split($str, $split_len = 1) {

    mb_internal_encoding('UTF-8');
    mb_regex_encoding('UTF-8');

    if ($split_len <= 0) {
        $split_len = 1;
    }

    $strlen = mb_strlen($str, 'UTF-8');
    $ret    = array();

    for ($i = 0; $i < $strlen; $i += $split_len) {
        $ret[ ] = mb_substr($str, $i, $split_len);
    }
    return $ret;
}
結果)
Array ( [0] => あ [1] => い [2] => う [3] => え [4] => お [5] => か [6] => き [7] => く [8] => け [9] => こ [10] => さ [11] => し [12] => す [13] => せ [14] => そ [15] => た [16] => ち [17] => つ [18] => て [19] => と [20] => な [21] => に [22] => ぬ [23] => ね [24] => の [25] => は [26] => ひ [27] => ふ [28] => へ [29] => ほ [30] => ま [31] => み [32] => む [33] => め [34] => も [35] => や [36] => ゆ [37] => よ [38] => ら [39] => り [40] => る [41] => れ [42] => ろ [43] => わ [44] => を [45] => ん ) Array ( [0] => あいう [1] => えおか [2] => きくけ [3] => こさし [4] => すせそ [5] => たちつ [6] => てとな [7] => にぬね [8] => のはひ [9] => ふへほ [10] => まみむ [11] => めもや [12] => ゆよら [13] => りるれ [14] => ろわを [15] => ん )
         このエントリーをはてなブックマークに追加   


作業効率化・ライフハックのオススメ記事




コンピュータ・テクノロジーのオススメ記事





恋愛・人間関係のオススメ記事




※ 当サイトは、トップページからリンクで辿る事の出来るページに限り、リンクフリーです。
※ 当サイトの閲覧/利用によって生じた如何なる損害も、当サイト管理人は責任を負いません。
※ 当サイトの内容を転載される場合は、当サイトへのリンクをお願い致します。