PHPでは、文字列を処理する場合、文字列を配列に分割する必要があります。 PHPは、このタスクを達成するために2つの一般的に使用される関数を提供します: str_split()とmb_str_split() 。彼らは似たようなことをしているようですが、彼らは非常に異なっています。次に、これら2つの機能と、異なるシナリオで使用する必要があるこれらの2つの関数の違いを分析します。
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()の動作には予期しない結果が得られる場合があります。
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()関数は、文字列をバイトではなく文字で分割します。これにより、マルチバイト文字(漢字など)を正しく分割できるようになります。
特性 | str_split() | mb_str_split() |
---|---|---|
処理された文字タイプ | バイトで分割(ASCII文字に適しています) | 分割された文字(マルチバイト文字に適し、UTF-8およびその他のエンコーディングに適しています) |
シナリオを使用します | ASCII文字のみを含む文字列に適しています | マルチバイトキャラクター(中国語、日本など)を含む弦に適しています |
関数は拡張機能にあります | PHPビルトイン機能 | MBSTRING拡張機能をインストールして有効にする必要があります |
ASCII文字列のみを扱う場合、追加の拡張機能に依存せず、実行がより効率的であるため、str_split()を使用することが適切です。
文字列にマルチバイト文字(UTF-8エンコード中国語、日本など)が含まれている場合は、 MB_STR_SPLIT()を使用する必要があります。マルチバイト文字を個々のバイトに誤って分割することなく、文字によって正しく分割されます。
mbstring拡張機能をインストールして有効にします
MB_STR_SPLIT()はMBSTRING拡張機能の関数であるため、使用する前に、PHPがMBSTRING拡張機能をインストールして有効にしていることを確認する必要があります。以下でインストールされているかどうかを確認できます。
php -m | grep mbstring
インストールされていない場合は、次のコマンドからインストールできます。
sudo apt-get install php-mbstring
パフォーマンスの違い<br> MB_STR_SPLIT()はマルチバイト文字を正しく処理できますが、文字エンコードとマルチバイト文字を処理する必要があるため、パフォーマンスのSTR_SPLIT()よりわずかに劣っている場合があります。
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);
出力: