プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
PHP、「mb_strcut()」と「mb_strimwidth()」の違い
似て非なる奴等

mb_strcut(対象文字列, 開始位置, 取得バイト数 [, エンコーディング])



mb_strimwidth(対象文字列, 開始位置, 丸める幅 [, 後ろに追加する文字, エンコーディング])

の違いをメモっておきます。(--)b

一番大きな違いは切り出す文字数ですね。
「mb_strcut()」は「バイト数」で計算するのに対し
「mb_strimwidth()」は「幅」で計算します。

ちなみに「幅」は「半角が1バイト、全角が2バイト」って扱いね。

こんなコードを書くとφ(--)
<?php
    //エンコード
    $enc = "UTF-8";

    //切り出しバイト数
    $lenByte = 8;

    $str1 = "1234567890";
    $str2 = "12345";
    $str3 = "a12345";
    $str4 = "abc12345";

    //byte数で切り出すパターン(mb_strcut())
    for($i = 1; $i <= 4; $i++){
        $tmpStr = mb_strcut(${'str' . $i}, 0, $lenByte, $enc);
        print "str" . $i . "s|" . $tmpStr . "|e<br />\n";
    }

    print "<br />\n";

    //幅で切り出すパターン(mb_strimwidth())
    for($i = 1; $i <= 4; $i++){
        $tmpStr = mb_strimwidth(${'str' . $i}, 0, $lenByte, "", $enc);
        print "str" . $i . "s|" . $tmpStr . "|e<br />\n";
    }

?>

こんな結果になるφ(--)
str1s|12345678|e
str2s|12|e
str3s|a12|e
str4s|abc1|e

str1s|12345678|e
str2s|1234|e
str3s|a123|e
str4s|abc12|e

あと忘れがちだけど大事なのがですね。

開始位置の指定方法なのです。
「mb_strcut()」は「バイト数」で指定するのに対し
「mb_strimwidth()」は「文字数」で指定します。

こんなコードを書くとφ(--)
<?php
    //エンコード
    $enc = "UTF-8";

    //切り出しバイト数
    $lenByte = 8;

    $str1 = "1234567890";
    $str2 = "12345";
    $str3 = "a12345";
    $str4 = "abc12345";

    //byte数で切り出すパターン(mb_strcut())
    for($i = 1; $i <= 4; $i++){
        $tmpStr = mb_strcut(${'str' . $i}, 2, $lenByte, $enc);
        print "str" . $i . "s|" . $tmpStr . "|e<br />\n";
    }

    print "<br />\n";

    //幅で切り出すパターン(mb_strimwidth())
    for($i = 1; $i <= 4; $i++){
        $tmpStr = mb_strimwidth(${'str' . $i}, 2, $lenByte, "", $enc);
        print "str" . $i . "s|" . $tmpStr . "|e<br />\n";
    }

?>

こんな結果になるのですφ(--)
str1s|34567890|e
str2s|12|e
str3s|12|e
str4s|c12|e

str1s|34567890|e
str2s|345|e
str3s|2345|e
str4s|c123|e

str2とstr3の開始位置が違いますよね?
上段(mb_strcut())はバイト数で開始位置指定なのでstr2、str3共に
「1」の途中が開始位置になり前にズラされて「1」から始まっています。
一方下段(mb_strimwidth())は文字数なので普通に3文字目から始まっているのです。

似て非なるこの2つの関数、使い分けに気を付けて
楽しい?PHPライフを送ってくださいませm(__)m
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● PHP  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト 

  関連記事