navigation.php
NavigationHelper::item('Main page', function($item) {
$item->item('first sub-item', null);
$item->item('second sub-item', function($item) {
$item->item('third level sub');
});
});
NavigationHelper.php
class NavigationHelper {
protected $items = [];
private static $_instance;
public static function item($name, \Closure $children = null)
{
$c = static::_ini();
$c->items[] = array(
'name' => $name,
'childrens' => []//@todo
);
if ($children instanceof \Closure) {
call_user_func($children, $c);
}
}
protected static function _ini()
{
if (!static::$_instance) {
static::$_instance = new static;
}
return static::$_instance;
}
}
所以我试图创建一个NavigationHelper类,它使用php闭包推送嵌套数组中的项目。在navigation.php文件中,我正在添加项目'主页面'而他的孩子应该是第一个子项目'和'第二个子项目' (最后一个应该有'第三级子')。
上面的代码将所有项目推送到数组,但我不明白如何将这些子项嵌套到父母身上。
我尝试将index设置为创建元素,并在调用closure函数之前将这些索引作为父id传递,但是如果子节点有子节点,则会覆盖此父ID,其他子节点将转到子子节点...
$c->items[$c->index] = array(
'name' => $name,
'parent' => $c->parent
);
$c->index++;
if ($children instanceof \Closure) {
$c->parent = $c->index;
call_user_func($children, $c);
}
我想要一些可以解决我的问题的帮助,是否有可能使用附加参数(如当前数组索引)调用回调函数? 也许其他一些建议?