2017-04-10 24 views
0

我有这样的像素替换字符串中的多个值:与多个源

<img src='http://www.montag.com/directory_folder/tracking_noip.php?tracking=[ID_MTG]&data=[TEL]' height='1' width='1' border='0'/> 

我需要我从脚本接收的值来替换键[TEL]和[ID_MTG]。例如,如果我有:

$tel = "0613321223"; 
$id_mtg = "4875"; 
$email = "[email protected]"; 

我需要输出:

<img src='http://www.montag.com/directory_folder/tracking_noip.php?tracking=4875&data=0613321223' height='1' width='1' border='0'/> 

如果我有:

<img src='http://www.montag.com/directory_folder/tracking_noip.php?tracking=[ID_MTG]&data=[EMAIL]' height='1' width='1' border='0'/> 

我需要输出继电器:

<img src='http://www.montag.com/directory_folder/tracking_noip.php?tracking=4875&[email protected]' height='1' width='1' border='0'/> 

我有:

$tel = "0613357221"; 
$email = "[email protected]"; 
$id_mtg = "560"; 

$string = "<img src='http://www.montag.com/directory_folder/tracking_noip.php?tracking=[TEL]&data=[ID_MTG]' height='1' width='1' border='0'/>"; 
$patterns = array(); 
$patterns[0] = ' /\[TEL\]/ '; 
$patterns[1] = ' /\[EMAIL\]/ '; 
$patterns[2] = ' /\[ID_MTG\]/ '; 
$replacements = array(); 
$replacements[2] = $id_mtg; 
$replacements[1] = $email; 
$replacements[0] = $tel; 
echo htmlentities(preg_replace($patterns, $replacements, $string)); 

但我的字符串是:

<img src='http://www.montag.com/directory_folder/tracking_noip.php?tracking=520&data=0613357221' height='1' width='1' border='0'/> 

顺序是相反的。

+0

如果您搜索固定字符串,则看不到正则表达式。你有没有试过[strtr](http://php.net/strtr)? –

回答

1

订单错误,因为您以相反顺序定义了$replacements。即使您按降序指定索引,您创建阵列的顺序仍保留。用print_r($replacements);检查。如果需要按照正确的顺序获取数组,可以使用ksort()键进行排序。

但是对于此应用,strtr()str_replace()更有意义。请确保以相同的顺序定义阵列:

$search = array('[TEL]', '[EMAIL]', '[ID_MTG]'); 
$replace = array($tel, $email, $id_mtg); 

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

我看着火车后面的这个解决方案,但在我看来完全是这样做的!我觉得我搜索得太远了^^ – Buck

4
$str = 'hi all, I said hello'; 

$replace_pairs = array(
    'all' => 'everybody', 
    'hello' => 'hey', 
); 

echo strtr($str, $replace_pairs); 

这会帮助你。