2012-03-20 2 views
0

У меня есть строка, которая может иметь простые шаблоны. И у меня есть массив со значениями для replacemenet. В настоящее время я делаю это с помощью цикла. Но я хочу изменить его на preg_replace. Вы можете мне помочь?Заменить шаблоны в строках по значениям массива

Пример:

$values = array(
    'id' => 120, 
    'name' => 'Jim' 
); 
$string = 'Hello <!name!>. Your ID is <!id!>'; 
$output = preg_replace(...); // Hello Jim. Your ID is 120 

Также preg_replace должны работать не только с идентификатором и именем, но и с любыми другими клавишами. Благодарю.

+0

я бы, вероятно, использовать 'preg_replace_callback' и закрытия. –

ответ

2

Что-то вроде следующего?

<?php 
$values = array(
    'id' => 120, 
    'name' => 'Jim' 
); 
$string = 'Hello <!name!>. Your ID is <!id!>'; 

function foo($val) { 
     return '/<!' . $val . '!>/'; 
} 

echo preg_replace(array_map('foo', array_keys($values)), array_values($values), $string); 

Если все дело в классе:

class Template { 
     static function bar($val) { 
       return '/<!' . $val . '!>/'; 
     } 

     function render($values, $string) { 
       echo preg_replace(array_map(array('Template', 'bar'), array_keys($values)), array_values($values), $string); 
     } 
} 

$values = array(
    'id' => 120, 
    'name' => 'Jim' 
); 
$string = 'Hello <!name!>. Your ID is <!id!>'; 
$T = new Template(); 
$T->render($values, $string); 
+0

Спасибо. Хорошая вещь. Могу ли я использовать метод класса вместо функции для array_map()? – pltvs

+0

определенно, отредактировал –

+0

отредактировал мой ответ :), надеюсь, что поможет –

Смежные вопросы