文字の変換あるいは部分文字列の置換を行う

# strtr

(PHP 4, PHP 5, PHP 7)

strtr — 文字の変換あるいは部分文字列の置換を行う

### 説明

strtr ( string `$str` , string `$from` , string `$to` ) : string
strtr ( string `$str` , array `$replace_pairs` ) : string

引数を三つ渡した場合、この関数は `str` のコピーを返します。その際に、文字列中に `from` の各文字 (シングルバイト) があれば `to` の対応する文字に変換します。つまり、すべての $from[$n] が $to[$n] に置換されることになります。ここで $n は、どちらの引数でも共通に有効なオフセットです。

`from` と `to` の長さが異なる場合、長い方の余分な文字は無視されます。 返される文字列の長さは、もとの `str` と同じになります。

引数を二つだけ渡す場合は、二番目の引数を array('from' => 'to', ...) 形式の配列にしなければなりません。 返される値は文字列で、もとの文字列中にある配列のキーと同じ部分を対応する値で置換したものとなります。 一番長いキーから順に調べます。一度部分文字列の置換を行うと、 置換後の文字列がさらに置換の対象となることはありません。

この場合は、配列のキーと値は任意の長さにすることができますが、キーを空にすることだけはできません。 さらに、返される文字列の長さはもとの `str` とは異なる可能性があります。 しかし、この関数が最も効率的に働くのは、すべてのキーが同じ長さである場合です。

### パラメータ

`str`

  変換する文字列。

`from`

  `to` に変換される文字列。

`to`

  `from` を置換する文字列。

`replace_pairs`

  `replace_pairs` パラメータを `to` や `from` のかわりに使用することができます。この場合は array('from' => 'to', ...) 形式の配列となります。

### 返り値

変換後の文字列を返します。

`replace_pairs` の中に空文字列 ("") のキーがある場合は `FALSE` を返します。 `str` がスカラー値でない場合は文字列への変換をせず、 警告を発して `NULL` を返します。

### 例

例1 strtr() の例

`<?php
// この形式の場合、strtr() はバイト単位での変換を行います。
// したがって、ここではシングルバイトエンコーディングを想定しています。
$addr = strtr($addr, "äåö", "aao");
?>`

次の例は、引数を二つだけ指定して strtr() をコールしたときの挙動を示すものです。置換の優先度 ("h" よりもっと長いキーに一致しているので、この置換は行われていないこと)、 そして一度置換した文字列はもう置換の対象にならないことを確認しましょう。

例2 2 つの引数を伴う strtr() の例

`<?php
$trans = array("h" => "-", "hello" => "hi", "hi" => "hello");
echo strtr("hi all, I said hello", $trans);
?>`

上の例の出力は以下となります。

    hello all, I said hi

これらふたつのモードの挙動は大きく異なります。引数が三つの場合は strtr() はバイト単位で置換し、二つの場合はより長い部分文字列を置換します。

例3 strtr() の挙動の比較

`<?php
echo strtr("baab", "ab", "01"),"\n";
$trans = array("ab" => "01");
echo strtr("baab", $trans);
?>`

上の例の出力は以下となります。

    1001
    ba01

### 参考

- str_replace() - 検索文字列に一致したすべての文字列を置換する
- preg_replace() - 正規表現検索および置換を行う