【发布时间】:2018-02-17 18:24:21
【问题描述】:
对于如何解决这个问题我有点茫然,我怀疑foreach 不是正确答案,我知道array_walk() 和RecursiveArrayIterator 的存在,但我没有使用任何一个的真实世界的经验,所以我可以用一些指向正确方向的指针来做。 (如果对答案有任何影响,我正在使用 PHP 7.1.9)。
源数据
我有一个单维数组,其中包含对象的父/子树。您可以假设树具有未知且可变的嵌套深度。一个基本示例如下所示:
$sampleParent=array("id"=>101,"level"=>1,"parent_id"=>1,"name"=>"parent","otherparam"=>"bar");
$sampleChildD1=array("id"=>234,"level"=>2,"parent_id"=>101,"name"=>"level1","otherparam"=>"bar");
$sampleChildD2=array("id"=>499,"level"=>3,"parent_id"=>234,"name"=>"level2","otherparam"=>"bar");
$sampleTree=array($sampleParent,$sampleChildD1,$sampleChildD2);
期望的输出
最终目标是输出 HTML 列表(即<ul><li></li></ul>),每个父列表一个列表。通过嵌套<ul> 标签实现子元素的嵌套。所以对于我上面的例子:
<ul>
<li>
<a href="#">parent</a>
</li>
<ul>
<li>
<a href="#">level1</a>
<ul>
<li>
<a href="#">level2</a>
</li>
</ul>
</li>
</ul>
</ul>
【问题讨论】:
-
到目前为止你尝试过什么?一棵树如何存储在单维数组中?每个父母总是只有一个孩子吗?
-
$sampleTree 在您执行 '$sampleTree=array($sampleParent,$sampleChildD1,$sampleChildD2);' 时变成带有数组的数组或多维数组。这对您的问题没有太大帮助,以澄清在处理/解析 sampleTree 期间您不再处理单维数组。