PHP行结果不重复

时间:2013-09-29 10:34:11

标签: php mysql arrays tags

我有一个带有以下

的数据库
----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注意在行之间重复单词和空格。

我也希望结果是网址?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>";
} 

2 个答案:

答案 0 :(得分:1)

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

$tags = array();
//iterate over your rows+tags
    if (!in_array($current_tag, $tags))
        $tags[] = $current_tag;

答案 1 :(得分:1)

拥有一串标签后,执行(未经测试)

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

implodearray_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确实使用逗号分隔用户输入的标签,但在数据库中的存储方式不同。