2013-01-17 155 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; 
?> 

我认为这可能会帮助您解决您的问题。