我在一个社交网站工作。例如,在发送通知时,您可以在发送的文本中以开发人员的身份在通知中键入user:20:name。所以说我发送了
“用户:20:在您的视频上评论的名称:8:名称,链接视频”
它会显示为“鲍勃在你的iOS 5评论视频上评论”。
因此,它将看到user,看到用户id和我想要的名称,然后在数据库中执行所需的工作,并将字符串中的user:20:name替换为Bob。
对于视频,它会知道我想要视频8的名称作为链接。我该如何解析这样的东西呢?我已经知道如何从数据库中抓取数据。只是停留在这一部分。知道怎么回事吗?
其中一个想法是自己获取每个标记,并对每个标记进行解析,然后在获得标记的处理版本时对其执行str_replace。
我不确定如何自己获取每个标记。
发布于 2011-06-27 16:56:53
不知道这是不是太简单了,它不处理字符串中的多个标签,但你可以尝试这样的东西作为起点:
<?php
// the original string
$str = 'User [user:20:name] did foo bar.';
// find the tag
preg_match('/(?<=\[)[a-z0-9:]+(?=\])/', $str, $tags);
// build a db query
list($table, $id, $field) = explode(':', $tags[0]);
$sql = sprintf('SELECT %s FROM %s WHERE id = %d', $field, $table, $id);
// DB query... returns user 'Bob'
$user = 'Bob';
// replace the original tag with the user's name
$output = preg_replace('/\[user:\d+:name\]/', $user, $str); 更新
对于多个标记,您可以使用preg_match_all(),然后遍历$tags数组,可能会使用$table变量作为键来构建查询数据数组……您必须根据您的数据库实现来决定使用这些数据来查询数据库的最有效方式。如果可以使用PDO,那么准备好的语句可能更好。缓存你的输出也是如此,因为你不想每次都预先匹配并替换所有的输出...或者只执行一次此操作,并将输出存储在数据库中。
发布于 2011-06-27 16:57:18
你是说像这样的东西吗?
<?php
$string = "[video:8:name,link]";
$string = trim($string, "[]");
$videoMetaData = explode(",", $string);
$nameArray = explode(":", $videoMetaData[0]);
$name = $nameArray[2];
$link = $videoMetaData[1];
echo "<a href='".$link."'>".$name."</a>";https://stackoverflow.com/questions/6490063
复制相似问题