-1

我在我的 bbcode 中使用了用户 ID,但我想显示用户名!所以我想要一个查询来做类似的事情

SELECT username 
FROM users 
WHERE id = "$1"';

这怎么可能?或者有没有其他解决方案?我希望输出是“约翰说”而不是“2 说”。

<?php
$str = "[quote=2]Foobar[/quote]";

$match = "/\[quote=(.*?)\](.*?)\[\/quote\]/is";
$replace = "<div class=\"quote\">$1 said:<br />>$2</div>";
$bbcode = preg_replace($match, $replace, $str);
?>
4

2 回答 2

0

你使用preg_replace_callback函数来做,

$bbcode = preg_replace_callback($match, function($matches){
       // execute query
       $query = "SELECT username FROM users WHERE id = '{$matches[1]}'";
       // get user name
       $username = $row['username']; // just for illustration.
       // return formatted string.
       return "<div class=\"quote\">$username said:<br />>$matches[2]</div>";
}, $str);

哦,还有更好的方法。为它们中的每一个运行 SQL 查询并不是一个好主意。因此,首先获取所有用户 ID 的内容。然后从 db 中获取所有对应的名称。

$match = "/\[quote=(.*?)\](.*?)\[\/quote\]/is";
preg_match_all($match, $str, $matches);

$query = "SELECT id, username from tbl1 where id IN (".implode(",", $matches[1]).")";
// run the query. get all the row in a hash.
$hash[$row['id']] = $hash[$row['username']];

$bbcode = preg_replace_callback($match, create_function(
    '$m',
    'global $hash;return "<div class=\\"quote\\">{$hash[$m[1]]} said:<br />$m[2]</div>";'
    ), $str);
于 2013-01-18T09:23:53.823 回答
0

您需要preg_replace_callback修改替换/将用户 ID 替换为正确的用户名,然后再将其插入到您的字符串中。

于 2013-01-18T09:22:04.490 回答