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

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

作成日: 更新日:

基本的な使い方

substr_replace関数は、文字列の一部を指定した別の文字列で置き換えるための関数です。この関数は、与えられた文字列の特定の位置から指定された長さの範囲を、新しい文字列に置き換える処理を実行します。

具体的には、この関数は四つの引数を受け取ります。最初の引数には、置き換えの対象となる元の文字列を指定します。二番目の引数には、置き換えとして挿入する新しい文字列を指定します。三番目の引数には、置き換えを開始する位置を数値で指定します。この開始位置は文字列の先頭を0として数え、負の値を指定した場合は文字列の末尾から数えた位置になります。四番目の引数には、置き換える文字の長さを数値で指定します。この長さを省略した場合や、指定した長さが文字列の残りの部分よりも長い場合は、開始位置から文字列の最後までが置き換えの対象となります。また、長さに負の値を指定すると、文字列の末尾から数えた長さを除いた部分が置き換えの対象となります。

この関数は、置き換えが完了した新しい文字列を返します。元の文字列自体が変更されることはありませんので、必要に応じて戻り値を新しい変数に代入して利用します。例えば、ユーザーの入力した文字列の一部を修正したり、特定の情報をマスクしたりする場合など、多様な文字列操作の場面で活用できる機能です。シンプルながらも非常に柔軟な文字列操作を実現できるため、プログラミングにおいて頻繁に利用されます。

構文(syntax)

1<?php
2
3// 文字列の一部を、別の文字列で置換する
4$result = substr_replace(
5    $string,      // 置換対象の文字列
6    $replacement, // 置換後の文字列
7    $start,       // 置換を開始する位置 (0から始まるインデックス)
8    $length       // 置換する文字数 (省略可能)
9);

引数(parameters)

array|string $string, array|string $replace, array|int $offset, array|int|null $length = null

  • string|array $string: 処理対象となる文字列または文字列の配列
  • string|array $replace: 置換する文字列または置換文字列の配列
  • int|array $offset: $string のどの位置から置換を開始するかを指定する整数、またはオフセットの配列
  • int|null|array $length = null: $string の $offset から置換する文字数を指定する整数、または文字数の配列。null を指定すると、$offset から文字列の最後まで置換します。

戻り値(return)

string|array|null

指定された文字列の一部を別の文字列に置き換えた結果を返します。置換が正常に行われた場合は文字列、置換対象が配列で部分的に置換された場合は配列、エラーが発生した場合はnullを返します。

サンプルコード

PHP substr_replaceで最後の文字を置換する

1<?php
2
3/**
4 * substr_replace() を使用して文字列の最後の文字を置換するサンプル
5 *
6 * @param string $originalString 元の文字列
7 * @param string $replacement 置換する新しい文字
8 * @return string 最後の文字が置換された新しい文字列
9 */
10function replaceLastCharacter(string $originalString, string $replacement): string
11{
12    // 第3引数 (offset) に負の値を指定すると、文字列の末尾から数えた位置になります。
13    // -1 は、末尾から1文字目、つまり最後の文字を指します。
14    // 第4引数 (length) を指定しない場合、offset以降のすべての文字が置換されます。
15    // offsetが-1の場合、結果的に最後の1文字だけが置換対象となります。
16    return substr_replace($originalString, $replacement, -1);
17}
18
19// 対象の文字列
20$text = 'Hello World!';
21
22// 置換したい文字
23$newChar = '.';
24
25// 関数を呼び出して最後の文字を置換する
26$result = replaceLastCharacter($text, $newChar);
27
28// 結果を出力する
29echo "元の文字列: " . $text . PHP_EOL;
30echo "置換後の文字列: " . $result . PHP_EOL;
31
32?>

このPHPコードは、substr_replace関数を使用して、指定された文字列の最後の文字を別の文字に置き換える方法を示したサンプルです。

substr_replace関数は、文字列の一部を別の文字列で置き換えるための関数です。第1引数には処理対象の文字列、第2引数には置き換える新しい文字列、第3引数には置換を開始する位置(オフセット)、そして第4引数には置き換える長さを指定します。

このサンプルコードの重要な点は、第3引数のオフセットに-1を指定していることです。オフセットに負の値を指定すると、文字列の末尾から逆方向に数えた位置が開始点となります。そのため、-1は文字列の最後の文字を指します。

また、第4引数である置換する文字の長さは省略されています。この引数を省略した場合、オフセットで指定した位置から文字列の最後までが置換の対象範囲となります。今回はオフセットが-1(最後の文字)なので、結果的に最後の1文字だけが新しい文字に置き換わります。

コード内のreplaceLastCharacter関数は、これらの仕組みを利用して、元の文字列と置換文字を受け取り、最後の文字を置換した新しい文字列を戻り値として返します。実行例では、'Hello World!'の最後の'!''.'に置き換えられ、'Hello World.'と出力されます。

substr_replace関数の第3引数に-1のような負の値を指定すると、文字列の末尾から数えた位置が処理の開始点となります。このサンプルでは、-1を指定することで最後の1文字を対象にしています。最も重要な注意点は、この関数が日本語などのマルチバイト文字を正しく扱えないことです。1バイト単位で文字列を処理するため、マルチバイト文字に使用すると文字化けの原因となります。安全に日本語を扱うには、mb_substr関数などを使って代替処理を実装する必要があります。また、第4引数の長さを省略すると、開始位置から文字列の末尾まで全てが置換されます。例えば第3引数を-2にすると最後の2文字が置換されるため、意図した範囲だけを置換できているか確認することが大切です。元の文字列が空の場合、置換文字列がそのまま返される点にも留意してください。

関連コンテンツ