9

私は次のような文字列を持っています

$string = "string_key::%foo%:%bar%";

、およびパラメータの配列

$params = array("foo" => 1, "bar" => 2);

このパラメータを$stringパターンに置き換えるにはどうすればよいですか?期待される結果は

string_key::1:2
4

3 に答える 3

6

まず、$params配列を書き直す必要があります。

$string = "string_key::%foo%:%bar%";
$params = array("foo" => 1, "bar" => 2);
foreach($params as $key => $value) {
    $search[] = "%" . $key . "%";
    $replace[] = $value;
}

その後、配列をstr_replace()次の場所に渡すだけです。

$output = str_replace($search, $replace, $string);

コードパッドで出力を表示

于 2013-01-21T12:11:40.750 に答える
2

個人的なメモとして、私はこれを行いました:

$string = "string_key::%foo%:%bar%";
$params = array("%foo%" => 1, "%bar%" => 2);
$output = strtr($string, $params);

配列に値がある場合、または文字列が置き換えられて見落とされない場合は、他に何もする必要はありません。

パターン置換のための高速で簡単な方法。

于 2014-04-07T15:26:47.047 に答える
1

何が最速の解決策になるかわかりません(文字列のサイズと使用する置換値の数によって異なります)。

私は通常、この種の関数を使用してパラメーター化された置換を実行します。とクロージャを使用preg_replace_callbackして、パーセントで囲まれた単語ごとに置換を実行します。

function replaceVariables($str, $vars)
{
    // the expression '/%([a-z]+)%/i' could be used as well 
    // (might be better in some cases)
    return preg_replace_callback('/%([^%]+)%/', function($m) use ($vars) {
        // $m[1] contains the word inside the percent signs
        return isset($vars[$m[1]]) ? $vars[$m[1]] : '';
    }, $str);
}

echo replaceVariables("string_key::%foo%:%bar%", array(
    "foo" => 1,
    "bar" => 2
));
// string_key::1:2

アップデート

str_replace()これは、対応する置換なしでパーセントで囲まれた値が見つかった場合に使用するのとは異なります。

この行は、動作を決定します。

return isset($vars[$m[1]]) ? $vars[$m[1]] : '';

'%baz%'の一部でない場合は、空の文字列に置き換えられ$varsます。でも、これ:

return isset($vars[$m[1]]) ? $vars[$m[1]] : $m[0];

'%baz%'最終的な文字列を残します。

于 2013-01-21T12:39:45.240 に答える