0

我已经创建了一个递归函数来以树形形式显示导航方案我在 codeigniter 中使用递归,但这会产生错误,因为我的代码是未定义的函数


    function parseAndPrintTree($root, $tree) 
      {
       $return = array();
       if(!is_null($tree) && count($tree) > 0) 
         {
          echo 'ul';
           foreach($tree as $child => $parent) 
            {
            if($parent == $root) 
              {
unset($tree[$child]); echo 'li'.$child; return parseAndPrintTree($child, $tree); // Recursion-here(Not called) echo 'closing li'; } } echo 'closing ul'; } }
我将根和平面数组传递给该函数并得到未定义的行为..在代码点火器控制器中递归调用函数的正确方法是什么错误::致命错误:调用未定义函数 parseAndPrintTree()

4

2 回答 2

1

如果您在控制器或模型中使用它,则该函数是一个类方法,并且需要这样调用,即使用$this->parseAndPrintTree($child,$tree)

...
if($parent == $root) 
{
 unset($tree[$child]);
 echo 'li'.$child;
      $this->parseAndPrintTree($child, $tree);
      // ^-- inside the recursion
 echo 'closing li';
}
...

否则,正如 Valeh 所说,函数需要在助手内部。创建一个助手,比如 helpers/site_helper.php:

if(!function_exists('parseAndPrinTree')
{
  function parseAndPrintTree($root, $tree)
  {}
}

您现在可以将其用于:

$this->load->helper('site');
parseAndPrintTree($root,$tree);

如果助手被多次调用,需要进行存在检查以避免出现“函数已定义”错误。

于 2012-07-14T12:41:05.417 回答
0

我得到了解决方案,我需要使用 $this 而不仅仅是函数名


    function parseAndPrintTree($root, $tree) 
      {
       $return = array();
       if(!is_null($tree) && count($tree) > 0) 
         {
          echo 'ul';
           foreach($tree as $child => $parent) 
            {
            if($parent == $root) 
              {

unset($tree[$child]); echo 'li'.$child; $this->parseAndPrintTree($child, $tree); // Recursion-here(Now called) echo 'closing li'; } } echo 'closing ul'; } }
于 2012-07-19T10:53:10.697 回答