How to iterate over nested arrays?
Here is what I have:
$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"
)
);
And here is what I want:
<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>
What I still have:
foreach ($nav as $key => $val) {
if (!is_numeric($key)) {
$nav_entry = $key;
} else {
$nav_entry = $val;
}
echo "<li>" . $nav_entry . "</li>";
}
My problem here is that I need this foreach loop if and when there is a child array. In addition, I need to somehow fit into the operator ifto add to the tag <ul></ul>...
I began to see the stars ... too confused.
$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;
}
Using:
<nav>
<ul>
<?= buildLists($array); ?>
</ul>
</nav>
output:
<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>
Try
<?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>";
?>