2013-12-08 31 views
0

大家好,我希望你們大家都有一個愉快的週末... 我有下面的問題,我花了差不多兩天的時間試圖找出它... 我有一個SQL查詢拉數據從數據庫,其結果是一個多維陣列作爲stdClass的對象...它看起來像這樣多維數組如何組主題

Array 
(
    [0] => stdClass Object 
     (
      [category_id] => 81 
      [category_name] => 369-1006-0 
      [published] => 1 
      [category_parent_id] => 8 
      [category_child_id] => 81 
     ) 

    [1] => stdClass Object 
     (
      [category_id] => 80 
      [category_name] => 369-1007-0 
      [published] => 1 
      [category_parent_id] => 8 
      [category_child_id] => 80 
     ) 

    [2] => stdClass Object 
     (
      [category_id] => 82 
      [category_name] => 369-1012-0 
      [published] => 1 
      [category_parent_id] => 8 
      [category_child_id] => 82 
     ) 

    [3] => stdClass Object 
     (
      [category_id] => 85 
      [category_name] => 369-1014-0 
      [published] => 1 
      [category_parent_id] => 8 
      [category_child_id] => 85 
     ) 
[........] 
); 

直到此時我可以簡單使用的print_r()由API調度信息按請求......或迴音的同時,公司的foreach的....顯示該信息爲方便閱讀...但問題是,我不能ID的小組他們...請允許我...

這個陣列是類別和每個類別作爲必須猜測它它們具有子類,但類別和子類別是使用第二表 如此關聯... [表1]具有所有有關的類別的信息,和[表2]有關聯,我的查詢它們連接在一起,這樣我可以得到一個「虛擬表」 ......,結果我得到的是多維的噩夢.... 的想法是他們組與類別他們的子類別,現在這裏是捕獲 ...

正如你可以在數組中看到我有[category_parent_id]在每個組中都有一個值爲1,2,3,4,5 ......這個價值觀每個人都重複他們自己......就像你在這個小例子中看到的那樣......所以,每一個[ category_parent_id]爲0的值是主要的類別,其餘的都是子類

這是我的虛擬表表的樣子

[category_id] [category_name] [category_parent_id] 
     1   item 1   0 
     2   item 2   0 
     3   item 3   1 
     4   item 4   1 
     5   item 5   2 
     6   item 6   3 
     7   item 7   2 
     8   item 8   2 

//這是主要的想法給他們組使用多維數組又名噩夢

Item 1 
    |_item 3 
    |_item 4 
Item 2 
    |_item 5 
    |_item 7 
    |_item 8 

這是我沒用的嘗試:

Attempt 1 
    $cc = 0; 

    foreach ($results as $obj_key => $cc){ 
    $cc++ 
     $catsname = $obj->category_name; 
     $catid = $obj->category_id; 
     $subcatid = $obj->category_parent_id; 

     echo $obj_key .' Name'; 
      foreach($cc as $key=>$value) 
      { 
       echo $key . $value . '<br> '; 
      } 
     echo '<br>'; 

    } 

Attempt 2 
$datasetCount = count($results); 
echo "<h2>How many ccats? $datasetCount </h2>"; 

$i = 0; 
foreach ($results as $categorias) { 
    $i++; 
    echo "<h2>Categoria $i</h2>"; 


    while (list($key, $value) = each ($categorias)) { 
     echo "$key: $value<br />"; 




    } 

} 

我有更多的嘗試,但在我的第二天和多個例子後,似乎是不可能的!我不相信......

現在,不要以爲我沒有嘗試其他的解決方案,我有,有一個簡單的方法來做到這一點沒有數組的我可以隨時另一列添加到表1 [cat_role] value [sub]:[main]這樣我就不會使用第二張桌子......但是在那裏,我問自己,如果我不學習這種技巧,當規則非常清晰時,會發生什麼或樹表,一個保存數據,另一個保持關係...我真的真的真的需要學習這種技術...

任何幫助將不勝感激!感謝您抽出時間來準備我的一塌糊塗......

+0

這裏還有很多類似的問題。例如:http://stackoverflow.com/questions/3261228/convert-flat-array-to-the-multi-dimentional – bitWorking

回答

0

通過this的啓發,作爲參考@redreggae:

$tree = array(); 
$nodes = array(); 

foreach ($results as $category) { 
    $id = $category->category_id; 
    $category->children = array(); 
    $nodes[$id] = $category; 

    if ($category->category_parent_id == 0) { 
     $tree[$id] = & $nodes[$id]; 
    } 

    foreach ($nodes as $id => & $node) {   
     if (isset($nodes[$node->category_parent_id])) { 
      $nodes[$node->category_parent_id]->children[$id] = $node; 
     } 
    } 
} 

echo '<pre>'; print_r($tree); 
+0

你好,謝謝你......那工作,但現在我有一點點混亂,我可以避開我的頭..當我嘗試以風格格式顯示數據時,我只能得到值的第一個字母......我想知道爲什麼? ...說我只想要category_name的值是「類別1」,我只得到「C」作爲回報... – Tanker