将一系列对象转换为带有嵌套列表项目的无序的HTML列表

问题描述 投票:0回答:2

我在WP中有一个装满导航菜单项的平坦阵列。每个项目都知道其父母,但他们似乎都不知道他们是否有孩子。

Array ( [0] => stdClass Object ( [ID] => 22 [menu_item_parent] => 0 ) [1] => stdClass Object ( [ID] => 108 [menu_item_parent] => 22 ) [2] => stdClass Object ( [ID] => 117 [menu_item_parent] => 108 ) [3] => stdClass Object ( [ID] => 118 [menu_item_parent] => 108 ) [4] => stdClass Object ( [ID] => 106 [menu_item_parent] => 22 ) [5] => stdClass Object ( [ID] => 119 [menu_item_parent] => 106 ) [6] => stdClass Object ( [ID] => 120 [menu_item_parent] => 106 ) [7] => stdClass Object ( [ID] => 23 [menu_item_parent] => 0 ) )
我尝试通过有条件的逻辑来处理几种不同的方式(并且每次硬编码值并不理想),但我一直将自己编码成一团糟。我如何迭代阵列以产生这样的结果?

<ul> <li>22 <ul class="child"> <li>108 <ul class="grandchild"> <li>117</li> <li>118</li> </ul> </li> <li>106 <ul class="grandchild"> <li>119</li> <li>120</li> </ul> </li> </ul> </li> <li>23</li> </ul>

您需要识别节点的孩子,以便将它们放在所需的结构中。  为此,您需要迭代元素并重组它们。  以下是做什么的粗略代码;未测试

php html arrays multidimensional-array html-lists
2个回答
1
投票

现在,new的数组$现在应该包含带有子节点的元素,您可以迭代这些元素以产生所需的结果。

这是通过循环浏览当前阵列,识别父母及其子节点的工作,并将其组织起来。 将只能深入两个层次;如果您需要更深入地进行,代码可能需要重新加工才能更好地组织。

我想从制作单独的父(主)阵列和子女数组开始(或者我们可以使其成为长的多维数组)

foreach($arr AS $value) { if($value->menu_item_parent == 0) $parentArr[] = $value->ID; else $childArr[$value->menu_item_parent][] = $value->ID; }

A递归功能将有助于获得一些全球解决方案,使孩子和孙子。考虑一下,


1
投票

必须有一个更好的方法来解决这种问题。

我最终这样做了:

<?php $items = wp_get_nav_menu_items('primary'); // original flat array foreach ($items as $item) { $pages[$item->menu_item_parent][] = $item; // create new array } foreach ($pages[0] as $parent) { if (isset($pages[$parent->ID])) { // if page has children echo '<li>'.$parent->ID; echo '<ul class="children">'; foreach ($pages[$parent->ID] as $child) { if (isset($pages[$child->ID])) { // child has children echo '<li>'.$child->ID; echo '<ul class="grandchildren">'; foreach ($pages[$child->ID] as $grandchild) { echo '<li>'.$grandchild->ID.'</li>'; } echo '</ul></li>'; } else { echo '<li>'.$child->ID.'</li>'; // child has no children } } echo '</ul></li>'; } else { // page has no children echo '<li>'.$parent->ID.'</li>'; } } ?>

	

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.