PHP用数组中的值替换字符串

时间:2014-01-13 19:46:57

标签: php regex preg-replace preg-match str-replace

我有一个字符串,如:

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

我有一个数组

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

我需要做的是取字符串并将&lt;%中的单词替换为数组中的实际文本

所以我的输出将是

   Hello John Smith welcome

我不知道如何实现这一目标,但我似乎无法用常规文本取代它

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

很抱歉我应该提到数组键可能与<%First Name%>

一样

所以它甚至可以是<%city%>,数组可以是city=>New York

8 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:4)

您可以在str_replace

中使用数组搜索和替换变量
$search = array('first_name', 'last_name');
$replace = array('John', 'Smith');

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

答案 2 :(得分: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

答案 3 :(得分:1)

您可以使用:

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

或非常简单(可能更有效),使用Brian H.回答(并按<%First Name%><%Last Name%>替换搜索字符串。)

答案 4 :(得分:1)

您可以使用str_replace

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

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

$result = str_replace($replacedKeys,$values,$textData['text']);

答案 5 :(得分: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);

答案 6 :(得分:0)

echo ' Hello '.$array[0][First Name].' '.$array[0][Last Name].'  welcome';

答案 7 :(得分:0)

function temp_tag_replace($tag_start,$tag_end,$temp_array,$text){
      if(is_array($temp_array)){
      $keys=array_keys($temp_array);
        foreach ( $keys as $key){
        $val=$temp_array[$key];
        $key=$tag_start.$key.$tag_end;
        $text=str_replace($key,$val,$text);
        }
      }
      return $text;
    }

    $text='Hi %*Name*% %*Surname*%';
    $temp_array=array('Name'=>'Otto','Surname'=>'Man');
    $tag_start='%*';
    $tag_end='*%';

    echo temp_tag_replace($tag_start,$tag_end,$temp_array,$text);