如何迭代嵌套数组?
Posted
技术标签:
【中文标题】如何迭代嵌套数组?【英文标题】:How to iterate over nested arrays? 【发布时间】:2015-10-17 01:39:27 【问题描述】:这是我所拥有的:
$nav = array (
"page 1" => array (
"page 1.1" => array (
"page 1.1.1"
"page 1.1.2"
) ,
"page 1.2"
)
"page 2" => array (
"page 2.1"
)
);
这就是我想要的:
<nav>
<ul>
<li>page 1
<ul>
<li>page 1.1
<ul>
<li>page 1.1.1</li>
<li>page 1.1.2</li>
</ul>
</li>
<li>page 1.2</li>
</ul>
</li>
<li>page 2
<ul>
<li>page 2.1</li>
</ul>
</li>
</ul>
</nav>
到目前为止我所拥有的:
foreach ($nav as $key => $val)
if (!is_numeric($key))
$nav_entry = $key;
else
$nav_entry = $val;
echo "<li>" . $nav_entry . "</li>";
我的问题是,如果有子数组,我需要有那个 foreach 循环。最重要的是,我需要以某种方式适应if
语句以添加<ul></ul>
标记...
我开始看到星星……太混乱了。
【问题讨论】:
“家”在哪里适合您的输出? @RobertCathey 对不起!这只是我在实际页面上工作的困惑。 > > 删除它。 我几乎拥有它。只是遇到了一个奇怪的问题。 知道了。将完全递归地工作。 向所有人致敬!经过测试,它们都有效。只选择了编码最短且最容易阅读的那个...@@;; 【参考方案1】:试试看:)
function createMenu($nav)
echo "<ul>";
foreach($nav as $key => $row)
if(!is_array($row))
echo "<li>".$row."</li>";
else
echo "<li>".$key;
createMenu($row);
echo "</li>";
echo "</ul>";
createMenu($nav);
【讨论】:
【参考方案2】:试试
<?php
$nav = array (
"page 1" => array (
"page 1.1" => array (
"page 1.1.1",
"page 1.1.2"
),
"page 1.2"
),
"page 2" => array (
"page 2.1"
)
);
function drawRecursive($list)
echo "<ul>";
foreach ($list as $key=>$item)
echo "<li>";
if (is_array($item))
echo $key;
drawRecursive($item);
else
echo $item;
echo "</li>";
echo "</ul>";
echo "<nav>";
drawRecursive($nav);
echo "</nav>";
?>
【讨论】:
【参考方案3】:$array = [
'home',
'page 1' => [
'page 1.1' => [
'page 1.1.1',
'page 1.1.2'
],
'page 1.2'
],
'page 2' => [
'page 2.1'
]
];
function buildLists($array)
$result = '';
foreach($array as $key => $value)
if(!is_int($key))
$result .= '<li>' . $key;
else if(!is_array($value))
$result .= '<li>' . $value;
if(is_array($value))
$result .= '<ul>';
$result .= buildLists($value);
$result .= '</ul>';
else
$result .= '</li>';
return $result;
用法:
<nav>
<ul>
<?= buildLists($array); ?>
</ul>
</nav>
输出:
<li>home</li>
<li>page 1
<ul>
<li>page 1.1
<ul>
<li>page 1.1.1</li>
<li>page 1.1.2</li>
</ul>
</li>
<li>page 1.2</li>
</ul>
</li>
<li>page 2
<ul>
<li>page 2.1</li>
</ul>
</li>
【讨论】:
以上是关于如何迭代嵌套数组?的主要内容,如果未能解决你的问题,请参考以下文章
如何让两个嵌套的 Parfors 在 Matlab 中迭代两个巨大的数组?
如何在 REACT JS API 调用中迭代 JSON 嵌套数组?