web-dev-qa-db-ja.com

PHP5で複数の値を検索して複数/異なる値に置き換えますか?

文字列内の複数の値を、何を何に置き換えるかを正確に指示する配列に置き換える組み込みのPHP関数はありますか?

例えば:

$searchreplace_array = Array('blah' => 'bleh', 'blarh' => 'blerh');
$string = 'blah blarh bleh bleh blarh';

そして、結果は「ブレブレラーブレブレブレブレラー」になります。

27
atomicharri

str_replace() を探しています。

$string = 'blah blarh bleh bleh blarh';
$result = str_replace(
  array('blah', 'blarh'), 
  array('bleh', 'blerh'), 
  $string
);

//追加のヒント:

そして、あなたの例のように連想配列で行き詰まっている場合、そのように分割することができます:

$searchReplaceArray = array(
  'blah' => 'bleh', 
  'blarh' => 'blerh'
);
$result = str_replace(
  array_keys($searchReplaceArray), 
  array_values($searchReplaceArray), 
  $string
); 
78
lpfavreau
$string = 'blah blarh bleh bleh blarh';
$trans = array("blah" => "blerh", "bleh" => "blerh");
$result = strtr($string,$trans);

詳細な説明については manual を確認できます。

19
nithi

str_replace()はそれを行います。

詳細については manual を確認してください。

1
chaos

場合によっては、同じ文字列を異なる値(出現ごと)で置き換えることを求める人もいます。例:すべての##を数値++ OR配列の値-

$split_at = '##';
$string = "AA ##  BB ##  CC ##  DD";
$new_string = '';
// echo $string;
$replace_num = 1;
$replace_arr = ['first' , 'second' , 'third'];
$split_at_cnt = substr_count($string, $split_at);
for ($split=0; $split <= $split_at_cnt; $split++)
{
    $new_string .= str_replace('##', ($replace_num++)." : ".$replace_arr[$split], substr( $string, 0, strpos($string, $split_at)+strlen($split_at)));
    $string = substr($string, strpos($string, $split_at)+strlen($split_at));
}

echo $new_string;
1
T.Adak

取得したものについては、その配列を検索と置換の両方としてstr_replaceに渡すだけです(配列をそのままにする場合は、検索パラメーターでarray_keysを使用します)。

0
user42092