2014-01-13 5 views
3

У меня есть строка, такие как:PHP заменить строку со значениями из массива

Hello <%First Name%> <%Last Name%> welcome 

и у меня есть массив

[0] => Array 
    (
     [First Name] => John 
     [Last Name] => Smith 
    ) 

Что мне нужно сделать, это взять строку и заменить слова в <% с фактическим текстом из массива

Так что мой результат будет

Hello John Smith welcome 

Я не уверен, как это сделать, но я не могу показаться даже заменить его обычным текстом

$test = str_replace("<%.*%>","test",$textData['text']); 

К сожалению, я должен из отметить, что ключи массива может изменяться, а также <%First Name%>

так это может быть даже <%city%> и массив может быть city=>New York

+0

Вы не можете сделать регулярное выражение в str_replace, но вы можете в preg_replace – sachleen

+0

тогда используйте 'array_keys()' и итерации через них? – demonking

ответ

1

Вы можете попробовать это,

$string ="Hello <%First Name%> <%Last Name%> welcome"; 
    preg_match_all('~<%(.*?)%>~s',$string,$datas); 
    $Array = array('0' => array ('First Name' => 'John', 'Last Name' => 'Smith')); 
    $Html =$string; 
    foreach($datas[1] as $value){   
     $Html =str_replace($value, $Array[0][$value], $Html); 
    } 
    echo str_replace(array("<%","%>"),'',$Html); 
4

Вы можете использовать массив как для поиска и замены переменных в str_replace

$search = array('first_name', 'last_name'); 
$replace = array('John', 'Smith'); 

$result = str_replace($search, $replace, $string); 
1

Вы можете использовать это:

$result = preg_replace_callback('~<%(First|Last) Name)%>~', function ($m) { 
    return $yourarray[$m[1] . ' Name']; } ,$str); 

или очень простой (и, вероятно, более эффективным), используйте Brian H. ответ (и заменить строки поиска по <%First Name%> и <%Last Name%>).

1

Вы можете использовать str_replace

$replacedKeys = array('<%First Name%>','<%Last Name%>'); 

$values = array('John','Smith'); 

$result = str_replace($replacedKeys,$values,$textData['text']); 
10
$array = array('<%First Name%>' => 'John', '<%Last Name%>' => 'Smith'); 
$result = str_replace(array_keys($array), array_values($array), $textData['text']); 
+0

это работает спасибо – Yeak

2
$string = "Hello <%First Name%> <%Last Name%> welcome"; 
$matches = array(
    'First Name' => 'John', 
    'Last Name' => 'Smith' 
); 

$result = preg_replace_callback('/<%(.*?)%>/', function ($preg) use ($matches) { return isset($matches[$preg[1]]) ? $matches[$preg[1]] : $preg[0]; }, $string);    

echo $result; 
// Hello John Smith welcome 
Смежные вопросы