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

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

作成日: 更新日:

基本的な使い方

strtr関数は、指定された文字列中の文字または部分文字列を、別の文字または部分文字列に置換する関数です。この関数は、主に二つの異なる方法で文字列の置換を実行できます。

第一に、三つの引数を受け取る形式では、対象となる元の文字列、置換元の文字集合、そして置換先の文字集合を指定します。例えば、「abracadabra」という文字列中の「a」を「x」に、「b」を「y」に置き換えたい場合、置換元の文字集合に「ab」、置換先の文字集合に「xy」を指定することで、元の文字列内の各「a」が「x」に、各「b」が「y」に変換されます。この形式は、文字単位での一括変換を効率的に行いたい場合に特に有用です。

第二に、二つの引数を受け取る形式では、対象となる元の文字列と、置換元と置換先のペアをキーと値として持つ連想配列を指定します。この形式では、置換元として任意の長さの部分文字列を指定できるため、特定の単語やフレーズを別の単語やフレーズに置き換えることが可能です。この連想配列を用いた置換では、連想配列のキー(置換元)が長いものから順に処理されるという重要な特性があります。これにより、「apple」と「applepie」のような関連する部分文字列がある場合でも、「applepie」が先に置換され、意図しない部分置換を防ぐことができます。

strtr関数は、テキストデータの整形、特定の記号の変換、ユーザー入力のサニタイズなど、幅広いシナリオで文字列処理を簡潔かつ効率的に行うために利用されます。特に、多数の異なる文字や部分文字列を一度に置換する必要がある場合に、その利便性を発揮します。

構文(syntax)

1<?php
2$originalString = "Hello PHP World";
3$replacements = [
4    "Hello" => "こんにちは",
5    "World" => "世界"
6];
7$translatedString = strtr($originalString, $replacements);
8echo $translatedString;
9?>

引数(parameters)

string $string, string $from, string $to

  • string $string: 置換対象の文字列
  • string $from: 置換される文字を指定する文字列
  • string $to: 置換後の文字を指定する文字列

戻り値(return)

string

指定された文字列内で、指定された検索文字列を置換した結果の文字列が返されます。

サンプルコード

PHP strtr 関数で文字列置換する

1<?php
2
3/**
4 * strtr() 関数の基本的な使用例
5 *
6 * strtr() 関数は、指定された文字列内の特定の文字を別の文字に置換します。
7 * $from に含まれる各文字は、$to の対応する位置にある文字に置換されます。
8 * $from と $to の文字列の長さは同じである必要があります。
9 */
10
11// 変換対象の元の文字列
12$originalString = "Hello PHP 8!";
13
14// 置換元の文字をまとめた文字列 (例: 'H' 'e' 'l' 'o' 'P')
15$fromChars = "HeloP";
16// 置換先の文字をまとめた文字列 (例: 'J' 'a' 'v' 'e' 'Q')
17// fromChars と同じ長さで、各文字が fromChars の対応する文字と置き換えられます
18$toChars   = "JaveQ";
19
20// strtr() 関数を使って文字列内の文字を置換します
21$translatedString = strtr($originalString, $fromChars, $toChars);
22
23echo "元の文字列: " . $originalString . PHP_EOL;
24echo "置換後の文字列: " . $translatedString . PHP_EOL;
25
26/*
27上記の例では、以下の置換が行われます:
28'H' -> 'J'
29'e' -> 'a'
30'l' -> 'v' (文字列中のすべての 'l' が対象)
31'o' -> 'e'
32'P' -> 'Q'
33*/
34
35// 別の例: 数字の置換
36$numberString = "123-ABC-456";
37$fromNumbers  = "123456";
38$toNumbers    = "ABCDEF"; // 各数字を対応する文字に置換
39
40$replacedNumbers = strtr($numberString, $fromNumbers, $toNumbers);
41
42echo PHP_EOL; // 出力の区切り
43echo "元の数字文字列: " . $numberString . PHP_EOL;
44echo "置換後の数字文字列: " . $replacedNumbers . PHP_EOL;
45
46/*
47この例では、以下の置換が行われます:
48'1' -> 'A'
49'2' -> 'B'
50'3' -> 'C'
51'-' は fromNumbers に含まれていないため、そのままです。
52'4' -> 'D'
53'5' -> 'E'
54'6' -> 'F'
55*/

PHPのstrtr関数は、指定した文字列中の特定の文字を別の文字に一括で置換するために使用します。この関数は3つの引数を取ります。

第1引数 $string には、文字を置換したい元の文字列を指定します。 第2引数 $from には、置換したい元の文字をまとめた文字列を指定します。 第3引数 $to には、$from に対応する置換後の文字をまとめた文字列を指定します。 ここで重要なのは、$from$to の文字列の長さが必ず同じでなければならない点です。$fromの1文字目が$toの1文字目に、$fromの2文字目が$toの2文字目に対応し、それぞれ置換が行われます。 戻り値は、置換後の新しい文字列です。元の文字列は変更されません。

例えば、"Hello PHP 8!" という文字列で'H''J'に、'e''a'に、'l''v'に、'o''e'に、'P''Q'に置換したい場合、strtr("Hello PHP 8!", "HeloP", "JaveQ")と記述します。これにより、元の文字列は"Javve QHP 8!"に変換されます。

また、"123-ABC-456" のような文字列中の数字を別の文字に置換する際にも利用できます。例えば、'1''A''2''B''3''C''4''D''5''E''6''F'に置換したい場合は、strtr("123-ABC-456", "123456", "ABCDEF")のように記述し、結果として"ABC-ABC-DEF"が得られます。$fromに含まれていないハイフンなどの文字は、置換されずにそのまま残ります。この関数は、複数の文字を同時に、かつ効率的に変換したい場合に非常に役立ちます。

strtr()関数を使用する際は、第二引数と第三引数の文字列($from$to)の長さを必ず同じにしてください。長さが異なると、置換が正しく行われない可能性があります。置換されるのは$fromに含まれる文字のみで、元の文字列内で$fromに含まれない文字はそのまま残ります。また、大文字と小文字は区別されますので、「a」と「A」は異なる文字として扱われる点にご注意ください。日本語などのマルチバイト文字の置換にはこの関数は向いておらず、文字化けや予期せぬ結果を招くことがあります。マルチバイト文字を安全に置換したい場合は、mb_ereg_replaceなどのマルチバイト対応関数を検討してください。

関連コンテンツ

【PHP8.x】strtr関数の使い方 | いっしー@Webエンジニア