2014-02-25 77 views
0

如果數組中存在特定的字符串,我想替換字符串中的值。PHP:用數組值替換字符串的某些部分

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

$array = array(
    'name' => '010 Pixel', 
    'city' => 'USA', 
    'hobby' => 'code', 
    'email' => '[email protected]' 
); 

我想用$ array中的名稱值替換{{name}}。如果大括號內的字符串不存在於$數組中,那麼讓該字符串保持原樣。

預期的結果:

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

的原因,我對這個問題是,當從表單來的任何值包含任何{{字段名}}那麼它不應該被替換。我只想替換$ str中設置的內容。

+1

這就是爲什麼我喜歡的StackOverflow,在這裏我們用所有不同的方法工作4個答案! – Birla

回答

1

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}}' => '[email protected]' 
); 
echo strtr($str, $array); 
+0

如果我的數組值來自$ _POST,該怎麼辦? –

+1

@ 010像素將{{}}包裹到你的數組索引中應該不難。 – xdazz

+0

幹得好。這完全按照預期工作。 –

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' => '[email protected]' 
); 

if (preg_match_all("/{{(.*?)}}/", $str, $m)) { 
    foreach ($m[1] as $i => $varname) { 
    $str = str_replace($m[0][$i], $array[$varname], $str); 
    } 
} 
+0

我已經試過這個,但我想要一些更簡單的方法哈哈。謝謝:) –

0
$string = preg_replace('/{{([a-zA-Z\_\-]*?)}}/ie','$array',$str); 

希望能幫助

+0

這是如何工作的?請解釋一下.. – Birla

+0

使用'e'修飾符,可以在'preg_replace'的替換部分中有任何PHP表達式。 – SpencerX

+0

你能告訴我一個這樣的演示嗎?它給了我一些錯誤。 –

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' => '[email protected]' 
); 

$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); 
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' => '[email protected]' 
); 
$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) 
*/