2014-12-03 133 views
-1

我试图用#hashtags获取一个字符串并将它们转换为数组键值! 例如:我怎样才能得到这个preg_replace替换?

string =“hello #world”;

我想替换为“hello $ line ['world']”;

我这样做:

$query = mysql_query($sql); 
while($line = mysql_fetch_assoc($query)) { 
    $code = preg_replace("/(#(\w+))/", $line['$1'], $string); 
    echo $code; 
} 

但我得到这样的警告:“未定义指数:$ 1”,显然只有回声打印出“你好”

但是,如果我把一个有效的$线直接显示它的内容。就像这样:

$query = mysql_query($sql); 
while($line = mysql_fetch_assoc($query)) { 
    $code = preg_replace("/(#(\w+))/", $line[name], $string); 
    echo $code; 
} 

这表明我“你好nameFromDatabase”为数据库中的每一行...

如何设置上的preg_replace此行$ [XXX]让位于#名称主题标签替换?

回答

2

你不能用preg_replace。当你调用该函数传递两个参数:

  1. "/(#(\w+))/"
  2. $line['$1']

的时候预浸料是做替代品,它已经为时已晚。第二个参数已经过评估,preg_method无法返回并重新将参数重新转换为所需的参数。

preg_replace_callback可以做你想要什么,虽然:

while($line = mysql_fetch_assoc($query)) { 
    $code = preg_replace_callback(
     "/(#(\w+))/", 
     function($matches) use ($line) { 
      return $line[$matches[1]]; 
     }, 
     $string 
    ); 
    echo $code; 
} 
+0

噢,我的上帝..非常感谢您! – user3787036 2014-12-03 05:50:06