PHP如何返回静态变量
function build_path($cid)
{
static $fr=array();
$DB = new MySQLTable;
$DB->TblName = 'shop_categories';
$where['cat_id']['='] = $cid;
$res = $DB->Select('cat_id,cat_name,cat_parent', $where);
if($res !== false)
{
$pid = mysql_fetch_array($res);
if($pid['cat_parent'] !== "0")
{
$fr[] = $pid['cat_id'];
build_path($pid['cat_parent']);
} else {
$fr[] = $cid;
$fr = array_reverse($fr);
print_r($fr);
return $fr;
}
}
}
print_r(build_path(100));
为什么 print_r 在函数中工作,但第二个 print_r 返回 NULL?
function build_path($cid)
{
static $fr=array();
$DB = new MySQLTable;
$DB->TblName = 'shop_categories';
$where['cat_id']['='] = $cid;
$res = $DB->Select('cat_id,cat_name,cat_parent', $where);
if($res !== false)
{
$pid = mysql_fetch_array($res);
if($pid['cat_parent'] !== "0")
{
$fr[] = $pid['cat_id'];
build_path($pid['cat_parent']);
} else {
$fr[] = $cid;
$fr = array_reverse($fr);
print_r($fr);
return $fr;
}
}
}
print_r(build_path(100));
Why is working print_r in function, but second print_r returns NULL?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
通常,要使递归函数正常工作,您需要在调用自身时返回一些内容。
在您的第一个嵌套 if 块中尝试此操作:
Normally, for a recursive function to work, you need to return something when calling itself.
Try this in your first nested if block:
仅供参考,如果您使用在数据库中存储分层数据的各种方法之一,则不需要编写递归函数或对 N 个层次结构执行 N 个查询。
FYI, You wouldn't need to write a recursive function or execute N queries for N levels of hierarchy if you used one of the various methods for storing hierarchical data in a database.
递归函数不得使用
static
通过调用传递数据 - 请改用参数。为什么你需要这一行:
??
Recursive functions must not use
static
to pass the data through invokes - use the arguments instead.And why do you need this line:
??
使用
return build_path($pid['cat_parent']); 代替第 14 行中的
build_path($pid['cat_parent']);
。Instead of
build_path($pid['cat_parent']);
in line 14 usereturn build_path($pid['cat_parent']);
.