我试图用#hashtags获取一个字符串并将它们转换为数组键! 例如:
string =" hello#world&#34 ;;
我想替换为"你好$ line [' world']";
我这样做了:
$query = mysql_query($sql);
while($line = mysql_fetch_assoc($query)) {
$code = preg_replace("/(#(\w+))/", $line['$1'], $string);
echo $code;
}
但是我收到了这样的警告:"未定义的索引:$ 1" 显然只有echo打印"你好"
但是,如果我直接放置一个有效的$ line键,它会显示其内容。像这样:
$query = mysql_query($sql);
while($line = mysql_fetch_assoc($query)) {
$code = preg_replace("/(#(\w+))/", $line[name], $string);
echo $code;
}
它告诉我"你好nameFromDatabase"对于每一行数据库...
如何在preg_replace上设置此$ line [XXX]以获取位于#hashtag替换位置的名称?
答案 0 :(得分:2)
你不能使用preg_replace。当你调用该函数时,你传递两个参数:
"/(#(\w+))/"
$line['$1']
当preg正在进行更换时,已经太晚了。第二个参数已被评估,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;
}