Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在smarty中调用递归函数?_Php_Recursion_Smarty - Fatal编程技术网

Php 如何在smarty中调用递归函数?

Php 如何在smarty中调用递归函数?,php,recursion,smarty,Php,Recursion,Smarty,我正在传递索引文件中的$p数组。它必须工作,但它没有给我任何东西,因为它是一个递归函数,它返回一个数组而不是打印的嵌套uls;如何解决此问题?问题 $Smarty->register_function()和{make_menu parent_id=$p.menu_bilder_data}导致使用($params,&$Smarty)调用该函数 其中$params= {make_menu parent_id=$P.menu_bilder_data} 这不是函数所期望的数据结构 解决方案 您可以在不

我正在传递索引文件中的
$p
数组。它必须工作,但它没有给我任何东西,因为它是一个递归函数,它返回一个数组而不是打印的嵌套uls;如何解决此问题?

问题 $Smarty->register_function()和{make_menu parent_id=$p.menu_bilder_data}导致使用($params,&$Smarty)调用该函数
其中$params=

{make_menu parent_id=$P.menu_bilder_data}
这不是函数所期望的数据结构

解决方案 您可以在不使用“register\u function”的情况下调用该函数

管道“|”将传递$p['menu_bilder_data']作为函数的第一个参数。并且“@”使管道通过阵列。如果没有“@”,将为数组中的所有元素调用函数

只是小费 将参数从$parent(一个数组)更改为$parent_id,所有菜单数据都可以从全局$menu获得

{$P.menu_bilder_data|@make_menu}

我把你的问题整理了一下,但我对最后一段不是很确定,你能再检查一下我没有把它搞砸吗?
array(
  'parent_id' => array(
     0 => array(
       1 => > "menu item 1",
)
{$P.menu_bilder_data|@make_menu}
function make_menu($parent_id)
{      
  global $menu;
  if (!isset($menu[$parent_id])) {
     return;
  }
  $nodes = $menu[$parent_id];
  echo '<ul>';
  foreach($nodes as $menu_id => $menu_name)
  {
    echo '<li>'.$menu_name ; 
    make_menu($menu_id) ;
    echo '</li>';
  }
  echo '</ul>';
}
{0|make_menu}