explode()
関数の定義と使い方
explode()
関数は
文字列を特定の区切り文字を基準に分割して配列に変換する関数です。
$fruits = explode(',', 'apple,banana,orange');
print_r($fruits);
/* 出力:
Array
(
[0] => apple
[1] => banana
[2] => orange
)
*/
この例では、文字列'apple,banana,orange'
を区切り文字であるコンマ','
を基準に分割し、それぞれの果物名が個別の要素として構成された配列として返されます。
explode()
関数は、文字列を区切り文字を基準に分割して配列として扱う処理において、特に便利に使用されます。
explode()
関数の構文は次のとおりです。
構文
explode(string $delimiter, string $string, int $limit = PHP_INT_MAX): array
引数
$delimiter |
入力文字列を分割する区切り文字です。 |
---|---|
$string |
分割対象の元の文字列です。 |
$limit |
分割する最大数で、この引数を省略すると、配列のサイズは制限なく区切り文字に従って文字列が分割されます。 |
戻り値
explode()
関数は文字列を区切り文字で分割して配列を作成し、その結果として得られた配列を返します。
引数と戻り値の関係
引数と戻り値の関係について説明します。
空文字列(''
)を区切り文字として指定した場合
- PHP8.0.0以前のバージョンでは、区切り文字パラメータに空文字列(
''
)を指定した場合、explode()
関数はfalse
を返していました。 - PHP8.0.0以降では、このような場合に
ValueError
を発生させるように変更されました。
$sentence = 'はじめまして。ようこそ!';
$words_array = explode('', $sentence);
var_dump($words_array); // bool(false)
空文字列(''
)を区切り文字として指定した場合、PHPの設定によってはWarningエラーが発生することがあります。
区切り文字が元の文字列の先頭または末尾にある場合
$delimiter
で指定した区切り文字が元の文字列の先頭または末尾にある場合、返される配列も空文字列で始まったり終わったりします。
$sentence = ',はじめまして。ようこそ!';
$words_array = explode(',', $sentence);
var_dump($words_array);
// array(2) { [0]=> string(0) "" [1]=> string(36) "はじめまして。ようこそ!" }
$sentence = 'はじめまして。ようこそ!,';
$words_array = explode(',', $sentence);
var_dump($words_array);
// array(2) { [0]=> string(36) "はじめまして。ようこそ!" [1]=> string(0) "" }
$sentence = ',はじめまして。ようこそ!,';
$words_array = explode(',', $sentence);
var_dump($words_array);
// array(3) { [0]=> string(0) "" [1]=> string(36) "はじめまして。ようこそ!" [2]=> string(0) "" }
区切り文字と元の文字列が同一の場合
区切り文字と元の文字列が同一の場合、空文字列(''
)を2つの要素として持つ配列が返されます。
$sentence = 'は';
$words_array = explode('は', $sentence);
var_dump($words_array);
// array(2) { [0]=> string(0) "" [1]=> string(0) "" }
使用例
explode()
関数の使用例を見てみましょう。
文字列の分割
explode()
関数を使って、以下のような文字列をコンマとスペースを区切り文字として分割し、配列にしてみましょう。
$input_string = 'apple|banana|orange';
$delimiter = '|';
$fruits_array = explode($delimiter, $input_string);
print_r($fruits_array);
/* 出力:
Array
(
[0] => apple
[1] => banana
[2] => orange
)
*/
上記のコードでは、explode()
関数が'|'
区切り文字を使って$input_string
を分割し、配列にしています。
URL解析
例として、URLからパスとクエリパラメータを抽出する場合が考えられます。
$url = 'https://www.example.com/products?category=electronics&page=1';
$parts = explode('?', $url);
$path = $parts[0];
$query_string = $parts[1];
echo "Path: $path"; // 出力: 'Path: https://www.example.com/products'
echo "Query String: $query_string"; // 出力: 'Query String: category=electronics&page=1'
上記のコードでは、explode()
関数を使ってURLを?
で分割し、パスとクエリ文字列を分離しています。
覚えておいてください!
上記の例のコードは、URLのクエリ文字列がエンコードされていると仮定していません。多くのコードでは安全なURLを使うためにURLのクエリ部分をエンコードしており、このURL文字列を分割する際にはデコードしてから使用します。
URLのエンコードとデコードに関する関数の使い方は、以下をご参照ください。
覚えておいてください!
PHPにはURLの構成要素を解析する組み込み関数があります。parse_url()
関数は、与えられたURL文字列を構文解析し、構成要素を返します。
文字列のパース
例として、時間形式から時間の単位を抽出する場合が考えられます。
例えば、時間を表す文字列が「02:30:45」という形式だとします。この文字列は時:分:秒で構成されています。ここから時間の単位を抽出したいと考えます。
$time = '02:30:45';
$timeParts = explode(':', $time);
$hours = $timeParts[0];
echo "Hours: $hours"; // 出力: 'Hours: 02'
上記のコードでは、explode()
関数が文字列をコロン(:
)で分割して配列にしています。こうして分割された配列の最初の要素が時間の単位を表します。したがって、出力結果は「Hours: 02」になります。この例を拡張して、時間・分・秒をそれぞれ抽出したり、時間形式を解析するより複雑な処理を行うことも可能です。
注意点
- 区切り文字の有無を確認すること:
explode()
関数を使う前に、文字列に区切り文字が含まれているかをまず確認することが望ましいです。区切り文字がない場合でも、explode()
は元の文字列を1つの要素として扱うため、注意が必要です。 - 空白の処理:文字列の先頭や末尾に空白がある場合にも注意が必要です。区切り文字とともに空白が存在すると、配列の最初または最後の要素に空白が含まれることがあります。
- 区切り文字が連続して現れる場合の処理:もし区切り文字が連続していると、空文字列が配列に追加されることがあります。そのため、結果的に空の値を扱うことになるので注意が必要です。
- 大文字・小文字の区別:
explode()
関数は大文字・小文字を区別します。区切り文字を基準に分割する際には、大文字・小文字が一致している必要があります。 - 区切り文字の長さ:
explode()
関数では正確な区切り文字を使用する必要があります。例えば、空白文字を区切り文字として使いたい場合は、explode(' ', $string)
のように明確に区切り文字を指定しなければなりません。 - メモリ使用量:大きな文字列を処理する際、
explode()
関数はメモリ使用量に影響を与える可能性があります。大きな文字列を扱う場合は、メモリ使用を最適化するために他の方法を検討することをおすすめします。