Возможный дубликат:
заменить несколько заполнителей php?
У меня есть .txt-файл, работающий как шаблон. Я сделал несколько заполнителей, таких как {{NAME}}
и я хотел бы заменить их на переменные. Каков наиболее эффективный способ сделать это? Имейте в виду, что у меня около 10 таких заполнителей в моем шаблоне.
Нет лучшего способа, чем str_replace?
str_replace
не только уродлива, но и вяло, если вам нужно заменить десять переменных (выполняет двоичный поиск и начинается с начала для каждой альтернативы).
Скорее используйте preg_replace_callback
, либо перечисляя сразу все 10 переменных, либо используя поздний поиск:
$src = preg_replace_callback('/\{\{(\w+)}}/', 'replace_vars', $src); # or (NAME|THING|FOO|BAR|FIVE|SIX|SVN|EGT|NNE|TEN) function replace_vars($match) { list ($_, $name) = $match; if (isset($this->vars[$name])) return $this->vars[$name]; }
Как насчет strtr
$trans = array( '{{NAME}}' => $name, "{{AGE}}" => $age, ...... ); echo strtr($text, $trans);
Какая уродливость в str_replace()
?
function replace_vars($string) { $vars = array('NAME'=>'Name', 'VAR2'=>'Value 2', 'VAR3'=>'Value 3'); $names = array(); foreach($vars as $name=>$var) { $names[] = '{{'.$name.'}'; } return str_replace($names, $vars, $string); }
или
function replace_vars($string) { $vars = array('{{NAME}}'=>'Name', '{{VAR2}}'=>'Value 2', '{{VAR3}}'=>'Value 3'); return str_replace(array_keys($vars), $vars, $string); }