2011-04-22 150 views
0

想擺脫深度 - 1字段,只顯示名稱和它的值。foreach循環的幫助

功能文件

<?php 
    public function getLocalSubNodes($node_name){ 
    $stmt = conn::getInstance()->prepare(" SELECT node.name, (COUNT(parent.name) - (sub_tree.depth + 1)) AS depth FROM categories AS node, categories AS parent, categories AS sub_parent, 
      (
      SELECT node.name, (COUNT(parent.name) - 1) AS depth 
      FROM categories AS node, 
      categories AS parent 
      WHERE node.left_node BETWEEN parent.left_node AND parent.right_node 
      AND node.name = :node_name 
      GROUP BY node.name 
      ORDER BY node.left_node 
      )AS sub_tree 
    WHERE node.left_node BETWEEN parent.left_node AND parent.right_node 
    AND node.left_node BETWEEN sub_parent.left_node AND sub_parent.right_node 
    AND sub_parent.name = sub_tree.name 
    GROUP BY node.name 
    HAVING depth <= 1 
    ORDER BY node.left_node"); 
    $stmt->bindParam(':node_name', $node_name, PDO::PARAM_STR); 
    $stmt->execute(); 
    return $stmt->fetchALL(PDO::FETCH_ASSOC); 
    } 
    ?> 


I instantiate the class calling the getLocalSubNodes functions 

    <?php 

    $hierachy = new hierachy; 
    $iterator = new RecursiveIteratorIterator(new recursiveArrayIterator($hierachy->getLocalSubNodes($name1))); 
    try { 
     foreach($iterator as $key=>$value) 
      { 
      echo $key.' -- '.$value.'<br />'; 
      } 
     } 
    catch(Exception $e) 
     { 
     echo $e->getMessage(); 
     } ?> 

導致

名字 - mp3播放器

深度 - 1個

名字 - CD播放器

深度 - 1個

名字 - 2對講機

深度 - 1

我只希望

名字 - mp3播放器

名稱 - cd播放器

名稱 - 雙向收音機

想擺脫深度。

在數據庫中我沒有深度這樣的字段,它似乎在上面的查詢中生成,我需要查詢來計算深度,但我不想打印深度和它的值,唐不需要打印或回顯深度和價值。

所以我認爲它可能是每個循環。

不知道這是否是這裏的問題。

謝謝。

+2

**請**格式的代碼正確。這不是一個論壇,所以'[code]'標籤什麼都不做。請點擊小代碼和報價按鈕。 – Blender 2011-04-22 22:34:20

+0

請正確縮進並標記你的代碼,它完全不可讀。 – Maverick 2011-04-22 22:34:29

回答

-1

您在這裏選擇在您的查詢:

SELECT node.name, (COUNT(parent.name) - 1) AS depth 

因此,在您的foreach你要麼需要檢查你想要的鑰匙,或檢查你不想要的鑰匙。

foreach($iterator as $key=>$value) 
    { 
    if ($key != 'name') { 
     continue; 
    } 
    echo $key.' -- '.$value.'<br />'; 
    } 

作爲後者的一個例子。

如果你想要的一切,但深度,那麼這樣做:

foreach($iterator as $key=>$value) 
    { 
    if ($key == 'depth') { 
     continue; 
    } 
    echo $key.' -- '.$value.'<br />'; 
    } 
+0

誰告訴你的?看下面的第三個:http://www.php.net/manual/en/language.operators.comparison.php編輯:顯然,費拉羅先生已經刪除了他的評論,使得這個看起來很混亂。 – Cthos 2011-04-22 22:39:18

+0

這是我不想顯示的深度,我仍然希望查詢能夠完成它的工作,但不要在那裏顯示深度。我會測試它 – fello2 2011-04-22 22:41:06

+0

@Cthos:是的,你對你的!=是正確的,謝謝你糾正我。 – Genzume 2011-04-22 22:49:02

1

一個簡單的解決將是一個if語句添加在你的顯示器

foreach($iterator as $key=>$value) 
{ 
    if ($key <> "depth") 
     echo $key.' -- '.$value.'<br />'; 
} 
+0

所以<>意味着沒有深度,這將是一個偉大的釋放人,這個小吸盤深度已經花了我兩天的生命,我一直試圖修復那一段時間,謝謝泰勒 – fello2 2011-04-22 22:40:22

+0

<>和!=都意味着'不等於'。我不確定這個人在哪裏得到他的信息!=不存在,但是如果你想要參考所有的操作員,可以看看這裏:http://www.php.net/manual/en/language.operators。比較.php – Cthos 2011-04-22 22:41:14

+0

是的,這應該爲你做。祝你的代碼好運。 – Genzume 2011-04-22 22:41:24