現在の位置: ホーム> 最新記事一覧> str_splitとmb_str_splitの違いと使用シナリオ

str_splitとmb_str_splitの違いと使用シナリオ

M66 2025-05-28

PHPでは、文字列を処理する場合、文字列を配列に分割する必要があります。 PHPは、このタスクを達成するために2つの一般的に使用される関数を提供します: str_split()mb_str_split() 。彼らは似たようなことをしているようですが、彼らは非常に異なっています。次に、これら2つの機能と、異なるシナリオで使用する必要があるこれらの2つの関数の違いを分析します。

1。STR_SPLIT ()関数

str_split()関数は、文字列を指定された長さのサブストリング配列に分割します。その基本的な使用法は次のとおりです。

 $string = "HelloWorld";
$result = str_split($string, 2);
print_r($result);

出力:

 Array
(
    [0] => He
    [1] => ll
    [2] => oW
    [3] => or
    [4] => ld
)

上記のように、 str_split()関数は、各サブストリングの長さを指定することにより、文字列を複数の部分に分割します。デフォルトでは、 str_split()は1つの文字によって分割されます。

ただし、 STR_SPLIT()はバイトに基づいて分割されます。つまり、UTF-8エンコードされた文字などのマルチバイト文字に友好的ではありません。文字列に中国語やその他の非ASCII文字などのマルチバイト文字が含まれている場合、 str_split()の動作には予期しない結果が得られる場合があります。

2。MB_STR_SPLIT ()関数

str_split()と比較して、 mb_str_split()は、マルチバイト文字の処理に適しています。この関数は、PHPのマルチバイト文字列拡張(MbString)に属し、UTF-8エンコードの文字列を正しく処理できます。

 $string = "こんにちは,世境界";
$result = mb_str_split($string, 2, "UTF-8");
print_r($result);

出力:

 Array
(
    [0] => あなた
    [1] => 良い
    [2] => ,
    [3] => 世
    [4] => 境界
)

この例では、 MB_STR_SPLIT()関数は、文字列をバイトではなく文字で分割します。これにより、マルチバイト文字(漢字など)を正しく分割できるようになります。

3. str_split()mb_str_split()の違い

特性str_split() mb_str_split()
処理された文字タイプバイトで分割(ASCII文字に適しています)分割された文字(マルチバイト文字に適し、UTF-8およびその他のエンコーディングに適しています)
シナリオを使用しますASCII文字のみを含む文字列に適していますマルチバイトキャラクター(中国語、日本など)を含む弦に適しています
関数は拡張機能にありますPHPビルトイン機能MBSTRING拡張機能をインストールして有効にする必要があります

4. MB_STR_SPLIT()を使用するのはいつですか? str_split()を使用するのはいつですか?

  • ASCII文字列のみを扱う場合、追加の拡張機能に依存せず、実行がより効率的であるため、str_split()を使用することが適切です。

  • 文字列にマルチバイト文字(UTF-8エンコード中国語、日本など)が含まれている場合はMB_STR_SPLIT()を使用する必要があります。マルチバイト文字を個々のバイトに誤って分割することなく、文字によって正しく分割されます。

5。使用する際に注意すべき問題

  1. mbstring拡張機能をインストールして有効にします
    MB_STR_SPLIT()はMBSTRING拡張機能の関数であるため、使用する前に、PHPがMBSTRING拡張機能をインストールして有効にしていることを確認する必要があります。以下でインストールされているかどうかを確認できます。

     php -m | grep mbstring
    

    インストールされていない場合は、次のコマンドからインストールできます。

     sudo apt-get install php-mbstring
    
  2. パフォーマンスの違い<br> MB_STR_SPLIT()はマルチバイト文字を正しく処理できますが、文字エンコードとマルチバイト文字を処理する必要があるため、パフォーマンスのSTR_SPLIT()よりわずかに劣っている場合があります。

6.サンプルコード

URLを含む文字列があると仮定します。これは、ドメインパーツを分割および変更する必要があります。この例では、 mb_str_split()を使用して、文字列が文字で適切に分割されていることを確認します。

 // 元の文字列
$url = "https://www.example.com/path/to/resource";

// ドメイン名を置き換えます
$parsed_url = parse_url($url);
$domain = "m66.net"; // 新しいドメイン名
$new_url = str_replace($parsed_url['host'], $domain, $url);

// キャラクターごとに新しいキャラクターを分割します URL
$result = mb_str_split($new_url, 3, "UTF-8");

print_r($result);

出力: