【问题标题】:php looping through undefined size of items with subitemsphp循环遍历带有子项的未定义大小的项目
【发布时间】:2013-04-21 15:23:18
【问题描述】:

因此,作为示例,我在网站中使用了这种结构。问题是我必须在下拉列表中获取这些项目,但它们必须基于其父项。

  • loadSubItems(id) 返回 id 的子项。
  • loadSubItems(0) 将给出根的子项,在本例中为 9、16、20
  • loadSubItems(9) 将给出一个空数组 loadSubItems(16) 将返回 17、18、19

问题在于,只要该级别有子项,中间循环(foreach)就必须继续循环,打印它们并且必须为每个级别添加一个额外的意图“_”。

我已经尝试解决这个问题好几个小时了,但我已经失去了思考,我似乎无法弄清楚必须发生什么才能做到这一点。

欢迎任何帮助!提前致谢:

下面的测试数据:

我正在使用以下代码进入第二级:

    $items = loadSubItems(0); // returns 9 16 20
    $intend = "";
    foreach($items as $item) {
        $subitems = loadSubItems($item); 
        if(count($subitems) > 0) {
            echo $intend.$item." has subitems: <br />";
            $intend .= "_";
            foreach($subitems as $subitem) {
                echo $intend.$subitem."<br />";
            }
        } else {
            echo "<br />".$item." has no subitems <br />";
        }
    }

这段代码有输出:

9 has no subitems 
16 has subitems: 
_17
_18
_19

20 has no subitems 

编辑:所以我想要的结果是:

9 has no subitems 
16 has subitems: 
_17
__21
___22
__23
___24
_18
_19

20 has no subitems

【问题讨论】:

  • 大多数人会浏览您的代码以寻找 a question 正确的问号(可能还有粗体字)和代码,所以我建议您问一个简洁的问题得到好的答案。
  • @FrankPresenciaFandos 我的猜测是,他正在寻找递归函数,但很难说..
  • 基本上你在看一个多维数组。看看array_walk_recursive()
  • 编辑了我的帖子并添加了我想要的输出。所以函数必须循环几次才能达到这个目的。谢谢你的链接,我现在得去健身房,等我回来看看!欣赏它
  • @FrankPresenciaFandos 这就是我在这里的原因。我当然可以将它硬编码为固定数量的级别。但问题是这段代码必须在哪里实现,我不知道会有多少层。所以我希望递归方法可以解决这个问题:-)

标签: php arrays loops


【解决方案1】:

看看我写的这个小函数。它完全符合您的需要.. 这是递归方法。您可以查看它的任何级别。

<?php
function arrayRec($array, $intent) {
    $intent .= "_";
    foreach($array as $key=>$value) {
        echo $intent.$key."</br>";
        arrayRec($value, $intent);
    }   
}
$tree = array("1" => array("11" => array(), "12" => array(), "13" => array()), "2" => array(), "3" => array("31" => array("311" => array()), "32" => array()), "4");
arrayRec($tree);
?>

结果如下:

_1
__11
__12
__13
_2
_3
__31
___311
__32
_4

【讨论】:

  • 我会确定的!谢谢
  • 看起来这就是我所需要的,我只得到这个错误:为 foreach() 提供的参数无效 不完全确定它为什么抱怨这个......但是谢谢!我要让它与这个功能一起工作!
  • 按照 $tree 变量中的模式,你不会得到任何错误!感谢接受
  • 我修复了该功能,使其与我的设计完美配合。我将其添加为答案
  • 谢谢!我可以准确地编辑我需要的东西。我对递归函数并不太熟悉,而且我从未想到过它。输出正是我需要的!我会用答案更新主帖。
猜你喜欢
  • 1970-01-01
  • 2018-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多