返回递归函数php

时间:2013-09-17 11:59:43

标签: php recursion return

我对递归函数输出有一点问题。这是代码:

function getTemplate($id) {
    global $templates;
    $arr = $templates[$id-1];
    if($arr['parentId'] != 0) {
        $arr['text'] .= str_replace($arr['attr'], $arr['text'], getTemplate($arr['parentId']));
    }
    return $arr['text']; 
}

问题是该函数在每次迭代时返回一个值,如下所示:

  

file.exe
  category / file.exe
  root / category / file.exe

我只需要最后一个类似完整路径的字符串。有什么建议吗?

// UPD:完成后,问题在于$arr['text'] .= str_replace

中的点

3 个答案:

答案 0 :(得分:1)

请试试这个。我知道它使用全局变量,但我认为这应该有用

$arrGlobal = array();

function getTemplate($id) {
    global $templates;
    global $arrGlobal;

    $arr = $templates[$id-1];
    if($arr['parentId'] != 0) {
       array_push($arrGlobal, getTemplate($arr['parentId']));
    }
    return $arr['text'];
}

$arrGlobal = array_reverse($arrGlobal);

echo implode('/',$arrGlobal);  

答案 1 :(得分:0)

试试这个,

function getTemplate($id) {
    global $templates;
    $arr = $templates[$id-1];
    if($arr['parentId'] != 0) {
    return $arr['text'] .= str_replace($arr['attr'], $arr['text'], getTemplate($arr['parentId']));
    }
}

答案 2 :(得分:0)

尝试一下:

function getTemplate($id, array $templates = array())
{
  $index = $id - 1;
  if (isset($templates[$index])) {
    $template = $templates[$index];
    if (isset($template['parentId']) && $template['parentId'] != 0) {
      $parent = getTemplate($template['parentId'], $templates);
      $template['text'] .= str_replace($template['attr'], $template['text'], $parent);
    }
    return $template['text'];
  }
  return '';
}

$test = getTemplate(123, $templates);

echo $test;