2013-09-29 3 views
0

У меня есть БД со следующимирезультатов PHP строк без повторения

----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.

Heres мой код

$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>"; 

     } 

ОК Heres новый код (спасибо за вашу помощь до сих пор)

$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>"; 
} 
+1

Пожалуйста, добавьте свой код PHP – kero

+1

'Пожалуйста, помогите ему водить мою жену безумной, поскольку они слишком долго разбираются в наших свадебных фотографиях !! - Мы не можем вам помочь. Код. Нам нужно увидеть ваш код. –

ответ

1

Это можно легко сделать с помощью in_array. Вы можете хранить теги внутри массива и перед тем, как поставить его на проверку для его существования.

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

Я пробовал это, и он выводит массив массива массивов «Что я делаю неправильно? – user2826526

1

После того, как строка тегов, делать (непроверенные)

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

Docs для implode, array_unique и explode.

EDIT

В своем коде вы печатаете все теги в строке, как одну строку, но вы хотите, чтобы удалить повторяющиеся теги, которые разделены пространством. Интересно, каков ваш ожидаемый результат. Это так? (с вашей базой данных)

van outside door 
daz 
flower 

или этот?

van 
outside 
door 
daz 
flower 

Первое звучит для меня неудобно, поэтому я бы предположил, что вам нужен последний случай.

Чтобы получить массив тегов в коде, предполагая, что ваши теги через пробел, я хотел бы предложить, в цикле, замените

$tags = $row['tags']; 

в

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

Docs для 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 действительно использует запятую для разделения тегов для ввода пользователем, но хранится по-разному в базе данных.

+0

Это не работает для меня, так как каждый результат уникален для каждой строки. Я подумал, что мне нужно сначала создать массив, а затем найти в нем уникальные слова, но я не могу решить, как создать массив. Приведенный ниже код просто выходит из массива слов три раза. – user2826526

+0

обновлен. см. мое редактирование. – luiges90

+0

Во-первых, да, я просто хочу список всех тегов, как вы догадались. Я пробовал свой код, и я получаю Предупреждение: array_merge() [function.array-merge]: Аргумент # 1 не является массивом в .... referring to $ tags = array_merge ($ tags, explode ('', $ tags)); – user2826526

Смежные вопросы