- array_push: documentation ( source)
- str_repeat: documentation ( source)
<?php
class MenuElement
{
public $id;
public $children = array();
public function __construct($id)
{
$this->id = $id;
}
public function addChild(MenuElement $menuElement)
{
array_push($this->children, $menuElement);
}
}
$menuElement1 = new MenuElement(1);
$menuElement11 = new MenuElement(11);
$menuElement12 = new MenuElement(12);
$menuElement121 = new MenuElement(121);
$menuElement122 = new MenuElement(122);
$menuElement123 = new MenuElement(123);
$menuElement1211 = new MenuElement(1211);
$menuElement121->addChild($menuElement1211);
$menuElement12->addChild($menuElement121);
$menuElement12->addChild($menuElement122);
$menuElement12->addChild($menuElement123);
$menuElement1->addChild($menuElement11);
$menuElement1->addChild($menuElement12);
function foo(MenuElement $elt, $level = 0) {
if (0 == $level) echo '<ul>'.PHP_EOL;
echo str_repeat(' ', $level+1).'<li>'.$elt->id;
if (!count($elt->children)) {
echo '</li>'.PHP_EOL;
return;
}
echo PHP_EOL.str_repeat(' ', $level+2).'<ul>'.PHP_EOL;
foreach($elt->children as $child) foo($child, $level+2);
echo str_repeat(' ', $level+2).'</ul>'.PHP_EOL;
echo str_repeat(' ', $level+1).'</li>'.PHP_EOL;
if (0 == $level) echo '</ul>'.PHP_EOL;
}
foo($menuElement1);