我有一个带有以下
的数据库----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>";
}
答案 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';
implode
,array_unique
和explode
的文档。
修改强>
在您的代码中,您将一行中的所有标记打印为一行,但您要删除空格分隔的重复标记。我想知道你的预期产量是多少。是这样的吗? (使用您的数据库)
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确实使用逗号分隔用户输入的标签,但在数据库中的存储方式不同。