在preg_replace中调用函数时出现问题

时间:2010-12-06 11:25:29

标签: php preg-replace

$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

是什么原因?我该如何解决?

非常感谢

2 个答案:

答案 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'");
}