$content = "... [gallery=174] ... ";
echo $c = preg_replace('/\[gallery=([0-9]+)\]/',gallery("$1"),$content);
function gallery($id)
{
mysql_query("select * from `table` where `id` = '$id'");
}
但是$id
它理解$1
,而不是查询中的174
。
是什么原因?我该如何解决?
非常感谢
答案 0 :(得分:3)
使用preg_replace
无法执行您的操作:{<1}}将在搜索字符串之前执行,您无法指定gallery()
导致其参数。
您正在寻找preg_replace_callback()
。
答案 1 :(得分:2)
编辑:如果您要替换它,则需要使用preg_replace_callback()
,如下所示:
$c = preg_replace_callback('/\[gallery=([0-9]+)\]/', 'gallery', $m);
function gallery($m)
{
$id = (int) $m[1];
$result = mysql_query("select * from `table` where `id` = '$id'");
// Fetch $result and return the appropriate gallery code here
}
旧答案
您应该使用preg_match()
来查找匹配项,因为您不是要尝试将其替换为SQL查询,只需从SQL查询中使用的字符串中获取值即可。试试这个:
$m = array();
preg_match('/\[gallery=([0-9]+)\]/', $content, $m);
$id = (int) $m[1]; // The value of the backreference $1
gallery($id);
另外,我相信您的gallery()
函数应该返回mysql_query()
,以便您可以分析查询的结果集:
function gallery($id)
{
return mysql_query("select * from `table` where `id` = '$id'");
}