帮助foreach循环

时间:2011-04-22 22:29:26

标签: php

想要摆脱深度 - 1字段,只显示名称及其值。

功能文件

    <?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路无线电

希望摆脱深度。

在数据库中我没有这样一个叫做深度的字段,它似乎是在上面的查询中生成的,我需要查询来计算深度,但我不想打印深度及其值,Don'需要打印深度及其值或回显。

所以我认为它可能是每个循环。

不确定这是否是这里的问题。

感谢。

2 个答案:

答案 0 :(得分:1)

一个简单的解决方法是在你的显示中添加一个if语句

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

答案 1 :(得分:-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 />';
    }