1

特定の文字列が配列に存在する場合、文字列内の値を置き換えたい。

$str = 'My name is {{name}}. I live in {{city}}. I love to {{hobby}}. {{ops...}}';

$array = array(
    'name' => '010 Pixel',
    'city' => 'USA',
    'hobby' => 'code',
    'email' => 'xyz@abc.com'
);

{{name}} を $array の name の値に置き換えたい。中括弧内の文字列が $array に存在しない場合は、その文字列をそのままにしておきます。

期待される結果:

My name is 010 Pixel. I live in USA. I love to code. {{ops...}}

これについて私が懸念している理由は、フォームからの値に {{field-name}} が含まれている場合、それを置き換えてはならないからです。$strに設定されているものだけを置き換えたい。

4

5 に答える 5

3

strtr関数があります。

$str = 'My name is {{name}}. I live in {{city}}. I love to {{hobby}}. {{ops...}}';

$array = array(
    '{{name}}' => '010 Pixel',
    '{{city}}' => 'USA',
    '{{hobby}}' => 'code',
    '{{email}}' => 'xyz@abc.com'
);
echo strtr($str, $array);
于 2014-02-25T09:39:11.333 に答える
1

preg_replace_callbackを使用すると動作します-

$str = 'My name is {{name}}. I live in {{city}}. I love to {{hobby}}. {{ops...}}';
$array = array(
    'name' => '010 Pixel',
    'city' => 'USA',
    'hobby' => 'code',
    'email' => 'xyz@abc.com'
);
$res = preg_replace_callback('/\{{2}(.*?)\}{2}/',
        function($matches)use($array){
            $key = $matches[1];
            if(isset($array[$key])){
                return "{{".$array[$key]."}}";
            };
            return $matches[0];
        },
        $str);
var_dump($res);
/*
    OUTPUT-
    string 'My name is {{010 Pixel}}. I live in {{USA}}. I love to {{code}}. {{ops...}}' (length=75)
*/
于 2014-02-25T09:50:03.690 に答える
1
$str = 'My name is {{name}}. I live in {{city}}. I love to {{hobby}}. {{ops...}}';

$array = array(
    'name' => '010 Pixel',
    'city' => 'USA',
    'hobby' => 'code',
    'email' => 'xyz@abc.com'
);

$callback = function($match) use ($array) {
    if (array_key_exists($match[1], $array)) {
        return $array[$match[1]];
    } else {
        return $match[0];
    }
};

$str = preg_replace_callback('/\{\{(.*?)\}\}/', $callback, $str);
于 2014-02-25T09:43:34.153 に答える