我正在为网页构建评论功能,其中所有评论都可以具有任意数量的标签(不是HTML标签,但是像此处的标签一样,不允许重复),并且任何人都可以更新这些标签。

假设某条注释包含标签[tag1, tag2, tag3],而某人添加了一个标签tag4,则删除了tag2。现在如何检查哪个旧标签不在新标签集中,以及可能添加了哪些标签?

我有表comments,其中包含idcomment列(还有其他与该问题无关的表)和comment_tags表,其中具有idtagcomment_id列。

我可以使所有旧标签都具有注释,然后遍历该数组并与每个标签一起检查是否包含在新标签集中。如果不是,请删除该标签。然后遍历新的标签集,检查包含在旧标签集中的每个新标签。如果不是,则将该标签添加到comment_tags表中。

听起来听起来太慢了,我猜想有更好的方法可以做到这一点。所以这是我最初的想法:

$db = new Database();
$purifier = new HTMLPurifier();

$existing_tags = $db -> get_comment_tags($_POST['comment_id']);

$new_tags = $purifier -> purify($_POST['tags']);
$new_tags = explode(" ", $new_tags);
$new_tags = array_unique($new_tags);

/* Delete tags that were not included in the new set of tags */
foreach ($existing_tags as $tags => $tag) {
    if (!in_array($tag['tag'], $new_tags)) {
        $db -> delete_comment_tag($existing_tags[$tags]['id']);
    }
}

/* Since get_comment_tags returns array which contains arrays,
let's strip unnecessary info */
$filtered_existing_tags = array();
foreach ($existing_tags as $key => $value) {
    $filtered_existing_tags[] = $value['tag'];
}

/* Add tags that were not included in the old set of tags */
foreach ($new_tags as $key => $value) {
    if (!in_array($value, $filtered_existing_tags)) {
        $db -> add_comment_tag($_POST['comment_id'], $value);
    }
}

最佳答案

我通常只需要在posts_tags表上运行两个SQL查询即可完成此任务:一个删除当前链接到该帖子的所有标签,另一个删除所有当前有效的标签。

关于php - 添加,删除和更新网页中的注释标签,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7517059/

10-16 23:18