0

我在 mySQL 中有字段,这些字段目前正像这样存储在“标签”字段下

Shopping|Health & Beauty
Coffee|Shopping

我要做的是循环遍历它以创建一维数组并仅获取唯一值。

我的查询从 TABLE 中选择 DISTINCT 标记并像这样运行循环:

    while ($row_tags = mysql_fetch_assoc($r_tags)) { 
    $tags = $row_tags['tags'];
    $imploded_tags[] = explode("|",$tags);
    }

echo "<pre>";
print_r($imploded_tags);

print_r 的结果将其显示为多维数组。我试图重新爆炸它并以不同的方式内爆它,但我无法获得任何成功。有没有办法可以将它创建为一维数组?并非所有标签都具有由 | 分隔的相同数量的标签,因此我似乎无法让它与我从另一个 StackOverflow 帖子中尝试过的功能一起使用。任何帮助将不胜感激!

输出:

Array
(
    [0] => Array
        (
            [0] => Shopping
            [1] => Health & Beauty

        )

    [1] => Array
        (
            [0] => Coffee
            [1] => Shopping
        )
4

3 回答 3

0

试试这个

while ($row_tags = mysql_fetch_assoc($r_tags)) { 
$tags = $row_tags['tags'];
$tags = explode("|",$tags);
 foreach($tags as $v){
  $imploded_tags[] = $v;
 }
}
于 2013-02-18T16:41:01.717 回答
0

我会做类似的事情:

         $imploded_tags = array_merge(explode("|",$tags), $imploded_tags);
    }

$imploded_tags = array_unique($imploded_tags);
echo "<pre>";
print_r($imploded_tags);

请参阅 和 的array_merge手册array_unique

但是,我确实认为您没有使用正确的方式来存储标签;它们应作为单独的值存储在单独的表中。

于 2013-02-18T16:42:47.433 回答
0

正在发生的事情是,当您从 MySQL 获取行时,您实际上首先在数组中获取了一堆数据,这就是您必须遍历它们的原因。

使用您的 implode 函数,您将获取一堆字符串,然后获取另一个数组集,然后将其附加到外部数组。

如果您真的想获得一个单维数组而不进行这种多维操作,那么您真正需要做的就是利用该循环中的另一个循环。

    $all_tags = array();
    while ($row_tags = mysql_fetch_assoc($r_tags)) { 
        $tags = $row_tags['tags'];
        $imploded_tags[] = explode("|",$tags);

        for($i = 0; $i < count($imploded_tags); $i++) {
            $all_tags[] = $imploded_tags[$i]
        }
    }
    print_r($all_tags);
于 2013-02-18T16:42:58.477 回答