php函数返回空字符串。 echo正确打印字符串;

时间:2011-12-16 17:11:30

标签: php

我对看似微不足道的问题感到非常难过。

我有这个功能:

function findCategoryNameInTree($id, $tree) {
    foreach($tree as $branch) {
        if ($branch['category_id'] == $id) {
             echo $branch['name'];//works
             print_r($branch['name']);//works
             //return($branch['name']); //returns nothing
             return $branch['name'];//fix this line per feedback still no return value
        } else {
            if(count($branch['children']) > 0) {
                findCategoryNameInTree($id,$branch['children']);
            }
        }

    }
}

我无法弄清楚为什么它没有返回任何东西。

请帮忙!

修改 以下是我调用函数的方法

//what I really want to do
$primgenre = findCategoryNameInTree($cat_id,$category_tree['children']);

//but this doesnt work either
echo $primgenre;

//nor this
print_r($pringenre);

6 个答案:

答案 0 :(得分:1)

here明确提到

  

返回数组时,应该在数组之前声明数组   返回,否则结果不如您所期望的那样;

另见注意

  

你应该永远不要在返回变量周围使用括号   通过引用返回,因为这不起作用。你只能回来   变量通过引用而不是语句的结果。

foreach($tree as $branch) { }

此处$branch只是$tree的数组的内部指针(假设为参考)。

答案 1 :(得分:1)

你忘了回来: -

findCategoryNameInTree($id,$branch['children']);

更改: -

return findCategoryNameInTree($id,$branch['children']);

答案 2 :(得分:0)

只需删除圆括号,然后就可以了!?

return $branch['name']; 

感谢减号;)

如果您的功能与您说的那样有效,请致电

$test = findCategoryNameInTree(XY, "bla");
echo $test;

应该输出一些东西。

答案 3 :(得分:0)

试试这个:

function findCategoryNameInTree($id, $tree) {
foreach($tree as $branch) {
    if ($branch['category_id'] == $id) {
         x = $branch['name']; 
    } else {
        if(count($branch['children']) > 0) {
            findCategoryNameInTree($id,$branch['children']);
        }
    }

}
return x;

}

答案 4 :(得分:0)

这对我有用,也是$ my_result方式!

<?php

$tree = ARRAY();
$tree[0] = ARRAY('category_id'=>10, 'name'=>'ten', 'children'=>'');
$tree[1] = ARRAY('category_id'=>11, 'name'=>'eleven', 'children'=>'');
$tree[2] = ARRAY('category_id'=>12, 'name'=>'twelve', 'children'=>'');


function findCategoryNameInTree($id, $tree) {
  //$my_result = 'none';
  foreach($tree as $branch) {
    if ($branch['category_id'] === $id) {
      //echo $branch['name'];//works
      //print_r($branch['name']);//works
      //$my_result = $branch['name'];
      //break; 
      return $branch['name']; //returns nothing
    }
    //else {
    // if(count($branch['children']) > 0) {
    //    findCategoryNameInTree($id,$branch['children']);
    //  }
    //}
  }
  //return $my_result;
}

echo findCategoryNameInTree(10, $tree).'<br />';
echo findCategoryNameInTree(11, $tree).'<br />';
echo findCategoryNameInTree(12, $tree).'<br />';

?>

答案 5 :(得分:0)

尝试这种方式:

$primgenre = findCategoryNameInTree($cat_id,$category_tree);

$ branch是(应该是)一个数组,所以$ tree是(应该是)。如果$ tree数组包含格式良好的$ branch数组,一切都应该正常。用我的示例$ tree array查看我的其他解决方案。