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 の結果は、それを多次元配列として示しています。私はそれを再爆発させ、さまざまな方法で内破しようとしましたが、成功することはできませんでした. これを 1 次元配列に作成する方法はありますか? すべてのタグが | で区切られた同量のタグを持っているわけではないので、別の 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関数を使用すると、一連の文字列を取得し、別の配列セットを取得して、それを外部配列に追加します。

この多次元的なことを行わずに1次元配列を取得したい場合、実際に行う必要があるのは、そのループ内の別のループを利用することだけです。

    $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 に答える