2013-01-17 165 views
1

我有一個wallposts MySql表與一個tag_filter字段,這個字段將有一個逗號分隔值。php獨特/獨特價值從逗號分離值

我想從此tag_filter字段獲取用戶的所有unique/distinct標籤並填充ul元素。

每個用戶可能有很多帖子。

例如

POST1:TAG_FILTER = A,B,C POST2:TAG_FILTER = A,d,E post3:TAG_FILTER = C,d,E

期望的輸出將是

<ul> 
<li>a</li> 
<li>b</li> 
<li>c</li> 
<li>d</li> 
</ul> 

這裏是我的代碼至今:

$tag_filter_list = mysql_query('SELECT tag_filter from wallposts where userid = '.$USER->id); 

$list = "<ul>"; 

while ($tag_filter = mysql_fetch_array($tag_filter_list)) { 
$value = $tag_filter["tag_filter"]; 
$info = explode(",", $value); 
foreach($info as $item) { 
$list.="<li>$item</li>\n"; 
} 
} 

$list .= "</ul>"; 
echo $list; 

我還想用從上面獲得的獨特/獨特列表填充js var。

 var sampleTags = [ 
     <?php 
        $tag_filter_list = mysql_query('SELECT tag_filter from wallposts where userid = '.$USER->id); 

         $all_tags = array(); 
         while ($tag_filter = mysql_fetch_array($tag_filter_list)) { 
          $value = $tag_filter["tag_filter"]; 
          $info = explode(",", $value); 
          $all_tags = array_merge($all_tags, $info); 
         } 
         $tags = array_unique($all_tags); // values will be sorted by the function 
         foreach($tags as $item) { 
          $list = "$item"; 
         } 
        echo join(',', $list); 
     ?> 
     ]; 

回答

1

嘗試合併所有TAG_FILTER陣列與array_merge(),然後使用array_unique()來刪除重複。

3

這可能有幫助。

$tag_filter_list = mysql_query('SELECT tag_filter from wallposts where userid = '.$USER->id); 

$tags = array(); 
while ($tag_filter = mysql_fetch_array($tag_filter_list)) { 
    $value = $tag_filter["tag_filter"]; 
    $tags[] = explode(",", $value); // put all in an array 
} 

// now, join and remove duplicates and sort in ascending order 
$tags = implode(',', $tags); 
$tags = explode(',', $tags); 
$tags = array_values(array_unique($tags)); 
sort($tags); 

$list = "<ul>"; 

foreach($tags as $item) { 
    $list .= "<li>$item</li>\n"; 
} 

$list .= "</ul>"; 
echo $list; 

希望這會有所幫助。

2

MySQL字段中逗號分隔的值是數據庫設計錯誤的標誌,應儘可能使用鏈接表。

然而,你的情況,下面的代碼可能工作:

$all_tags = array(); 
while ($tag_filter = mysql_fetch_array($tag_filter_list)) { 
    $value = $tag_filter["tag_filter"]; 
    $info = explode(",", $value); 
    $all_tags = array_merge($all_tags, $info); 
} 
$tags = array_unique($all_tags); // values will be sorted by the function 
foreach($tags as $item) { 
    $list .= "<li>$item</li>\n"; 
} 

把所有標籤的JavaScript變量:

<script type="text/javascript"> 
var sampleTags = [<?php echo explode(', ', $tags); ?>]; 
</script> 
+0

輝煌謝謝你,我怎麼能添加每個獨特的$項目var var sampleTags = [] – Codded

+0

請編輯您的問題,如果你想補充'sub'-questions :)的答案:) – SirDarius

+0

謝謝你的答覆,雖然它的輸出 - var sampleTags = [];使用\t echo print_r($ tags);陣列輸出的數據是正確的 – Codded

0

就用下面的例子嘗試:

<?php 
$post_array = array('a,b,c','a,d,e','c,d,e'); 
$tag_list = '<ul>'; 
$i=0; 
while($i < count($post_array)){ 
$filter_explode = explode(',',$post_array[$i]); 
$filter_count = count($filter_explode); 
for($j=0;$j<$filter_count;$j++) 
{ 
if(!in_array($filter_explode[$j],$tag_list_build)){ 
$tag_list_build[] = $filter_explode[$j]; 
} 
} 
$i++; 
} 
$tag_list_build_count = count($tag_list_build); 
for($k=0;$k<$tag_list_build_count;$k++) 
{ 
$tag_list.= '<li>'.$tag_list_build[$k].'</li>'; 
} 
$tag_list.= '</ul>'; 
echo $tag_list; 
?> 

我認爲這可能會幫助您解決您的問題。