【PHP8.x】substr関数の使い方

substr関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

substr関数は、文字列の一部分を抽出する関数です。文字列の中から指定した開始位置から指定した文字数分の文字列を取り出し、新しい文字列として返します。この関数は、元の文字列を変更することなく、部分文字列を取得するために使用されます。

substr関数は、3つの引数を受け取ります。最初の引数は、操作対象となる文字列です。2番目の引数は、部分文字列の開始位置を示す整数値です。開始位置は0から始まり、文字列の先頭が0番目となります。3番目の引数は、抽出する文字数を示す整数値です。この引数を省略した場合、開始位置から文字列の末尾までのすべての文字が抽出されます。

開始位置に負の値を指定した場合、文字列の末尾からのオフセットとして解釈されます。例えば、-1を指定すると、文字列の最後の文字から開始されます。文字数に負の値を指定した場合、文字列の末尾から指定された文字数だけ手前までが抽出されます。

substr関数は、文字列処理において非常に汎用的な関数であり、文字列の解析、データの抽出、フォーマット変換など、さまざまな場面で利用されます。例えば、長い文字列から特定の情報を抜き出したり、ファイル名から拡張子を取り除いたりする際に役立ちます。文字列操作を行う際には、substr関数の機能を理解しておくことが重要です。

構文(syntax)

1substr ( string $string , int $offset , ?int $length = null ) : string

引数(parameters)

string $string, int $offset, ?int $length = null

  • string $string: 部分文字列を抽出したい元の文字列
  • int $offset: 部分文字列の抽出を開始する位置(インデックス)。0から始まります。負の値を指定すると、文字列の末尾から数えて指定した位置から抽出を開始します。
  • ?int $length = null: 抽出する部分文字列の長さ。省略した場合(null)、または負の値を指定した場合は、$offset から文字列の末尾までの部分文字列が抽出されます。

戻り値(return)

string

指定された位置から指定された長さの文字列を切り出して返します。

サンプルコード

PHP substrで文字列を切り出す

1<?php
2
3declare(strict_types=1);
4
5/**
6 * substr() 関数の基本的な使い方を示すサンプルです。
7 * 文字列の一部を切り出して新しい文字列を返します。
8 */
9function runSubstringExample(): void
10{
11    // 対象となる文字列
12    $originalString = 'Hello, PHP 8 World!';
13
14    echo "元の文字列: " . $originalString . PHP_EOL;
15    echo '--------------------------' . PHP_EOL;
16
17    // --- パターン1: 開始位置を指定し、最後までを切り出す ---
18    // 7番目の文字 (インデックス 6) から文字列の最後までを切り出します。
19    // インデックスは 0 から始まります。
20    $result1 = substr($originalString, 6);
21    echo "1. 7番目から最後まで: " . $result1 . PHP_EOL; // 出力: PHP 8 World!
22
23    // --- パターン2: 開始位置と長さを指定して切り出す ---
24    // 7番目の文字 (インデックス 6) から 5 文字分を切り出します。
25    $result2 = substr($originalString, 6, 5);
26    echo "2. 7番目から5文字分: " . $result2 . PHP_EOL; // 出力: PHP 8
27
28    // --- パターン3: 負の開始位置を指定する ---
29    // 末尾から6文字目の位置から、最後までを切り出します。
30    $result3 = substr($originalString, -6);
31    echo "3. 末尾から6文字: " . $result3 . PHP_EOL; // 出力: World!
32
33    // --- パターン4: 負の長さを指定する ---
34    // 先頭から、文字列の末尾から7文字目までを切り出します。
35    // (つまり、末尾の7文字 " World!" を除外します)
36    $result4 = substr($originalString, 0, -7);
37    echo "4. 先頭から末尾7文字前まで: " . $result4 . PHP_EOL; // 出力: Hello, PHP 8
38}
39
40// サンプルコードを実行
41runSubstringExample();

PHPのsubstr関数は、指定した文字列の一部を切り出して新しい文字列として取得するための基本的な関数です。

この関数は主に3つの引数を受け取ります。第1引数には、切り出しの対象となる元の文字列を指定します。第2引数には、切り出しを開始する位置を数値で指定します。この開始位置は、先頭の文字を0番目として数える点に注意が必要です。第3引数は切り出す文字の長さを指定し、この引数を省略した場合は、指定した開始位置から文字列の最後までが対象となります。関数の戻り値は、切り出された新しい文字列です。この操作によって元の文字列が変更されることはありません。

サンプルコードの1つ目の例では、開始位置のみを指定し、7番目の文字から文字列の最後までを切り出しています。2つ目の例では、開始位置と長さを両方指定し、7番目の文字から5文字分だけを取得しています。

また、引数には負の数を指定することもできます。3つ目の例のように開始位置に負の数を指定すると、文字列の末尾からの位置として扱われます。最後の例では、長さに負の数を指定しています。これは切り出しの終点が「文字列の末尾から数えて指定した文字数の手前まで」となり、結果として文字列の末尾部分が除外された文字列を取得できます。

substr関数で最も注意すべき点は、日本語のようなマルチバイト文字を正しく扱えないことです。この関数は文字数ではなくバイト数で処理するため、日本語を含む文字列に使用すると文字化けを引き起こす可能性があります。日本語などを扱う場合は、代わりにmb_substr関数を使用してください。また、文字の開始位置は1番目ではなく0番目から数える「インデックス」で指定します。例えば、3番目の文字から切り出す場合の指定は2となります。引数に負の値を指定すると、文字列の末尾を基準に処理できますが、開始位置と長さで挙動が異なるため、意図した結果になるかよく確認することが大切です。

PHP substr_replace で文字列置換する

1<?php
2
3/**
4 * 文字列の一部を別の文字列で置換する substr_replace() の使用例を示します。
5 *
6 * この関数は、指定した文字列の特定の位置から、
7 * 特定の長さの部分を、別の文字列に置き換えます。
8 */
9function demonstrateSubstrReplace(): void
10{
11    // 元となる文字列
12    $originalString = 'Hello, world!';
13    echo '元の文字列: ' . $originalString . PHP_EOL;
14    echo '---------------------------------' . PHP_EOL;
15
16    // --- 例1: 文字列の一部を置き換える ---
17    // 'world' (開始位置7, 長さ5) を 'PHP' に置き換えます。
18    $result1 = substr_replace($originalString, 'PHP', 7, 5);
19    echo '例1: ' . $result1 . PHP_EOL; // 出力: Hello, PHP!
20
21    // --- 例2: 指定位置から最後までを置き換える ---
22    // 開始位置7 ('w') から文字列の最後までを 'everyone!' に置き換えます。
23    // 第4引数 (長さ) を省略した場合の動作です。
24    $result2 = substr_replace($originalString, 'everyone!', 7);
25    echo '例2: ' . $result2 . PHP_EOL; // 出力: Hello, everyone!
26
27    // --- 例3: 文字列を挿入する ---
28    // 開始位置7に、長さ0で 'beautiful ' を挿入します。
29    // 第4引数 (長さ) に 0 を指定すると、元の文字列は削除されずに挿入動作になります。
30    $result3 = substr_replace($originalString, 'beautiful ', 7, 0);
31    echo '例3: ' . $result3 . PHP_EOL; // 出力: Hello, beautiful world!
32
33    // --- 例4: 負の値で開始位置を指定する ---
34    // 末尾から6文字目の位置から 'galaxy!' に置き換えます。
35    // -6 は 'world!' の 'w' の位置を指します。
36    $result4 = substr_replace($originalString, 'galaxy!', -6);
37    echo '例4: ' . $result4 . PHP_EOL; // 出力: Hello, galaxy!
38}
39
40// 作成した関数を実行します
41demonstrateSubstrReplace();

PHPのsubstr_replace関数は、文字列の一部を別の文字列で置き換えるために使用します。この関数は、指定した文字列の特定の位置から始まる部分を、別の文字列で置き換えた結果を返します。

第1引数には、操作の対象となる元の文字列を指定します。第2引数には、挿入または置換するための新しい文字列を渡します。

第3引数には、置換を開始する位置を整数で指定します。この位置は0から始まり、正の数を指定すると文字列の先頭から、負の数を指定すると末尾からの位置として扱われます。

第4引数では、置き換える部分の長さを指定し、省略可能です。この引数を省略した場合は、第3引数で指定した開始位置から文字列の最後までが置換対象となります。もし、この長さに0を指定すると、元の文字列は削除されず、指定した位置に第2引数の文字列が挿入される動作になります。

関数の戻り値は、これらの処理によって生成された新しい文字列です。元の文字列が直接変更されることはありません。サンプルコードでは、これらの引数の組み合わせによって、文字列の置換、末尾までの置換、挿入、そして末尾からの位置指定といった具体的な使用例を確認できます。

substr_replace関数を使う際、開始位置は0から数える点に注意が必要です。また、開始位置に負の値を指定すると、文字列の末尾から逆算した位置が基準となります。第4引数の長さを省略した場合は開始位置から文字列の最後までが置き換え対象となり、0を指定した場合は元の文字を削除せず、指定した文字列を挿入する動作になります。最も重要な注意点は、この関数がバイト単位で文字列を処理することです。そのため、日本語のようなマルチバイト文字を含む文字列に使用すると、文字化けを引き起こす可能性があります。日本語を安全に扱う場合は、mb_string拡張モジュールの関数を組み合わせて同様の処理を実装する必要があります。

関連コンテンツ