2013-02-18 86 views
0

我目前正在場下的「標籤」打破多維數組爲一維

Shopping|Health & Beauty 
Coffee|Shopping 

我試圖做的是循環通過這個來創建存儲像這樣的MySQL的領域一維數組,並只抓取唯一值。

我有我的查詢由表中選擇不同標記和運行這樣的循環:

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帖子嘗試的功能。任何幫助將不勝感激!

OUTPUT:

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

     ) 

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

那麼你在找什麼,只是系統中所有標籤的唯一陣列?你能顯示你的SQL查詢並解釋你的數據庫結構嗎?你有一個標籤表,你可以從中獲取這些數據嗎? – 2013-02-18 16:43:55

回答

0

試試這個

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

謝謝,這工作得很好! – 2013-02-18 16:55:15

0

我會做這樣的事情:

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

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

參見手冊上array_mergearray_unique

但是,我認爲您沒有使用正確的方式來存儲您的標籤;它們應作爲單獨的值存儲在單獨的表中。

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);