-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

文字列に挿入する前に、置換を変更したり、ユーザー ID を正しいユーザー名に置き換えたりするには、preg_replace_callbackが必要です。

于 2013-01-18T09:22:04.490 に答える
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 に答える