1

tag_filter フィールドを持つウォールポスト MySql テーブルがあります。このフィールドにはコンマ区切りの値が含まれます。

この tag_filter フィールドからユーザーの一意のタグをすべて取得し、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);  
         ?>
        ];
4

4 に答える 4

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;

お役に立てれば。

于 2013-01-17T10:42:48.243 に答える
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>
于 2013-01-17T10:42:55.643 に答える
1

すべての tag_filter 配列を array_merge() でマージしてから、array_unique() を使用して重複を削除してください。

于 2013-01-17T10:41:42.427 に答える
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;
?>

これはあなたの問題を解決するのに役立つかもしれないと思います。

于 2013-01-17T11:42:11.303 に答える