【PHP8.x】mb_str_split関数の使い方
mb_str_split関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
mb_str_split関数は、指定された文字列を文字単位で分割し、その結果を配列として返す関数です。
この関数は、日本語などのマルチバイト文字を含む文字列を正確に処理する際に使用します。バイト単位で分割する通常の関数と異なり、mb_str_splitは指定された文字エンコーディングに基づいて文字単位で分割するため、文字化けを防ぎ、多バイト文字の文字列も正しく扱えます。
第一引数には分割対象の文字列を、第二引数$lengthには分割する文字数を指定します。$lengthを省略すると1文字ずつ分割されます。第三引数$encodingでは、文字列の文字エンコーディングを指定します。省略時はPHPの内部エンコーディングが適用されますが、正確な処理のためには明示的な指定が推奨されます。
この関数は、分割された部分文字列の配列を返します。Webアプリケーションで多様な文字エンコーディングの文字列を安全に処理したい場合や、日本語などの多バイト文字を適切に扱う上で非常に有用です。
構文(syntax)
1mb_str_split(string $string, int $length = 1, ?string $encoding = null): array|false
引数(parameters)
string $string, int $length = 1, ?string $encoding = null
- string $string: 分割したい文字列
- int $length = 1: 分割する文字数。デフォルトは1文字ずつ
- ?string $encoding = null: 文字エンコーディング。指定しない場合は内部エンコーディングを使用
戻り値(return)
array
文字列をマルチバイト文字を考慮して分割した配列を返します。
サンプルコード
PHP mb_str_split で文字列を分割する
1<?php 2 3/** 4 * mb_str_split関数の基本的な使用方法を示すサンプルコード。 5 * この関数はマルチバイト文字列を、指定された長さのチャンクまたは1文字ごとに配列に分割します。 6 * PHP 7.4.0以降で利用可能です。 7 */ 8function demonstrateMbStrSplit(): void 9{ 10 // 日本語を含むマルチバイト文字列を準備 11 $multibyteString = "こんにちはPHPプログラミング!"; 12 13 echo "--- 元の文字列 ---\n"; 14 echo $multibyteString . "\n\n"; 15 16 // 1. 引数を省略して1文字ごとに分割する (デフォルト動作) 17 echo "--- 1文字ごとに分割 (length=1) ---\n"; 18 $chars = mb_str_split($multibyteString); 19 print_r($chars); 20 echo "\n"; 21 22 // 2. 指定した長さ (例: 3文字) で文字列を分割する 23 echo "--- 3文字ごとに分割 ---\n"; 24 $chunksOfThree = mb_str_split($multibyteString, 3); 25 print_r($chunksOfThree); 26 echo "\n"; 27 28 // 3. エンコーディングを指定して文字列を分割する 29 // 入力文字列のエンコーディングがUTF-8であることを明示する場合 30 echo "--- 2文字ごとに分割 (エンコーディング指定: UTF-8) ---\n"; 31 $chunksOfTwoWithEncoding = mb_str_split($multibyteString, 2, 'UTF-8'); 32 print_r($chunksOfTwoWithEncoding); 33 echo "\n"; 34} 35 36// 関数の実行 37demonstrateMbStrSplit(); 38 39?>
PHP 8.4で利用できるmb_str_split関数は、日本語のようなマルチバイト文字列を安全かつ正確に分割し、配列として取得するための機能です。この関数は、PHP 7.4.0以降で導入されました。
最初の引数 $string には分割したい元の文字列を指定します。次の引数 $length は、何文字ごとに文字列を分割するかを数値で指定します。この引数を省略すると、デフォルトで1文字ずつ分割されます。最後の引数 $encoding は、元の文字列の文字エンコーディングを指定するためのものです。これを指定しない場合、PHPの内部エンコーディング設定が使用されますが、明示的に指定することでより意図した通りの結果を得やすくなります。関数は、分割された部分文字列の配列を戻り値として返します。
サンプルコードでは、まず「こんにちはPHPプログラミング!」というマルチバイト文字列を準備しています。一つ目の例では、$lengthを省略し、文字列が1文字ずつ分割されて配列に格納される様子がわかります。二つ目の例では、$lengthに3を指定しているため、文字列が3文字ずつ分割されて配列になります。三つ目の例では、$lengthに2を指定しつつ、エンコーディングに'UTF-8'を明示的に指定して2文字ずつ分割しています。これは、特に異なるエンコーディングの文字列を扱う際に有用な使い方です。このように、mb_str_split関数を利用することで、多様なニーズに合わせてマルチバイト文字列を柔軟に分割できます。
この関数は、日本語のようなマルチバイト文字を含む文字列を、文字単位で正しく分割するために使います。PHP 7.4.0以降のバージョンで利用可能であり、古いPHPバージョンでは実行できませんので、環境を確認してください。
length引数を省略すると文字列が1文字ずつ分割されますが、数値を指定するとその文字数で分割されます。文字列の最後に指定したlengthより短い文字が残った場合、残りの文字は一つの要素として配列に追加されます。
encoding引数でエンコーディングを明示的に指定することで、文字化けや意図しない分割を防ぎ、異なるエンコーディングの文字列も安全に扱えます。省略した場合はPHPの内部エンコーディングが使われますので、特に外部から取得した文字列を扱う際には、常に明示することをお勧めします。