Php foreach循环的帮助

Php foreach循环的帮助,php,Php,希望去掉depth--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 p

希望去掉depth--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();
        } ?>

我实例化了调用getLocalSubNodes函数的类
导致

名称--mp3播放器

深度——1

名称--cd播放机

深度——1

名称--双向无线电

深度——1

我只想要

名称--mp3播放器

名称--cd播放机

名称--双向无线电

想要摆脱深度

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

所以我认为这可能是每个循环的最佳结果

但不确定这是否是问题所在


谢谢。

一个简单的修复方法是在显示器中添加if语句

foreach($iterator as $key=>$value)
{
    if ($key <> "depth")
        echo  $key.' -- '.$value.'<br />';
}
foreach($iterator as$key=>$value)
{
如果($key“depth”)
回显$key.'-'.$value.
; }
您在这里的查询中选择它:

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)
{
如果($key!=“name”){
持续
}
回显$key.'-'.$value.
; }
是后者的一个例子

如果您想要所有的深度,请执行以下操作:

foreach($iterator as $key=>$value)
    {
    if ($key == 'depth') {
       continue;
    }
    echo  $key.' -- '.$value.'<br />';
    }
foreach($iterator as$key=>$value)
{
如果($key=='depth'){
持续
}
回显$key.'-'.$value.
; }
请正确设置代码格式。这不是一个论坛,所以
[code]
标签完全不起作用。请点击
code
quote
按钮。请正确缩进并标记您的代码,它完全不可读。谁告诉您的?下面看第三个:编辑:很明显,费拉罗先生删除了他的评论,使这一个看起来很混乱。我不想显示深度,我仍然希望查询完成它的工作,但不要显示其中的深度。我会测试it@Cthos:是的,您的回答是正确的!=,谢谢你纠正我。到目前为止,ferrero little condition去掉了字段深度的$key和$value。@fello2:是的,他的基本上与我给出的第二个选项相同,只是我使用了一个
continue
跳到循环的下一个迭代,只是因为我觉得它看起来更干净了一点。在计算上,它们的处理速度也应该差不多。所以这取决于你的喜好。我也反对在if语句中不使用大括号。所以意思是不使用深度,这将是一个伟大的发布人,这个小傻瓜深度占用了我两天的时间,我已经尝试修复了一段时间,谢谢泰勒和!=两者都表示“不相等”。我不知道这家伙是从哪里得到他的信息的不存在,但是如果你想参考所有的运营商,那么就来吧:谢谢费雷罗,你在条件方面做得很好,它不仅去掉了深度字段的$key值,而且在本例中也去掉了该值。请不要忘记单击解决此问题的任何答案旁边的绿色复选标记,以便其他用户知道哪个解决方案有效。