0

我有一个带有以下内容的数据库

----id---|-----name-----|-----owner----|----tags---------------|  
----1----|-----123------|------jc------|--van outside door-----|  
----2----|-----124------|------dw------|----van daz------------|  
----3----|-----125------|------jc------|--daz outside flower----|  

我想要做的是回显标签列中所有单词的列表,而不重复相同的单词。

到目前为止,我已经设法回应

van outside doorvan dazdaz outside flower注意重复的单词和行之间没有空格。

我也希望结果是 url 链接?t=$tag

这是为了对照片进行分类。我应该将标签列中的分隔符更改,daz,indoor,flower.

这是我的代码

  $sql = "SELECT * FROM photos";
  $filterresult = mysql_query($sql);

  while($row = mysql_fetch_array($filterresult))
      {
          $id = $row['id-name'];
          $name = $row['name'];
          $owner = $row['owner'];
          $tags = $row['tags'];

          $filterdir = "photos/$owner/index_files/vlb_thumbnails1/";
          $filterdir2 = "photos/$owner/index_files/vlb_images1/";

          echo "<a href=\"photoview102.php?t=$tags\">$tags</a>";

      }

好的,这是新代码(到目前为止感谢您的帮助)

$tags = array();

  $sql = "SELECT * FROM photos";
  $filterresult = mysql_query($sql);
  while($row = mysql_fetch_array($filterresult))
      {
          $id = $row['id-name'];
          $name = $row['name'];
          $owner = $row['owner'];

          $tags = array_merge($tags, explode(' ', $tags));

          $filterdir = "photos/$owner/index_files/vlb_thumbnails1/";
          $filterdir2 = "photos/$owner/index_files/vlb_images1/";


      }


$tags = array_unique($tags);

foreach ($tags as $tag) {
echo "<a href=\"photoviewer102.php?t=$tag\">$tag</a>";
} 
4

2 回答 2

1

这可以通过 轻松完成in_array。您可以将标签存储在数组中,然后再检查它的存在。

$tags = array();
//iterate over your rows+tags
    if (!in_array($current_tag, $tags))
        $tags[] = $current_tag;
于 2013-09-29T10:39:14.150 回答
1

在你有一串标签之后,做(未经测试)

// $tags = 'van outside door van daz daz indoor flower';
$tags = implode(' ', array_unique(explode(' ', $tags)));
// $tags = 'van outside door daz indoor flower';

implode的文档。array_uniqueexplode

编辑

在您的代码中,您将一行中的所有标签打印为一行,但您想删除以空格分隔的重复标签。我想知道你的预期输出是什么。是这样吗?(使用您的数据库)

van outside door
daz
flower

或这个?

van
outside
door
daz
flower

前者对我来说听起来很尴尬,所以我假设你会喜欢后一种情况。

要在代码中获取标签数组,假设您的标签是空格分隔的,我建议在您的循环中替换

$tags = $row['tags'];

$tags = array_merge($tags, explode(' ', $row['owner']));

的文档array_merge。您需要$tags在循环之前初始化第一个,如$tags = array()

在循环之后,执行删除重复项的魔法。不再爆炸,因为我们在循环中完成了它并且已经有了数组。也不再内爆,因为我们将逐个元素地打印它,而不是作为字符串。

$tags = array_unique($tags);

并推迟标签的打印,即移动

echo "<a href=\"photoview102.php?t=$tags\">$tags</a>";

在循环之后

foreach ($tags as $tag) {
    echo "<a href=\"photoview102.php?t=$tag\">$tag</a>";
}

关于分隔符问题,您不必这样做,除非您的标签包含空格。在这种情况下,您可能想改用逗号。但是,这将阻止您在标签内使用逗号。

值得注意的是,Wordpress 确实使用逗号来分隔用户输入的标签,但在数据库中的存储方式不同。

于 2013-09-29T10:40:46.120 回答