我有一个带有分层用户的用户表。因此用户可以拥有父用户。我试图返回某个用户的所有子用户ID的数组。 我的函数返回“null”。怎么了?
public function userDownline($userid, $result = array()) {
$dbconn = $this->DBase();
$children = $dbconn->GetAll('SELECT id FROM users WHERE parent=' . (int)$userid);
if(count($children) > 0) {
foreach($children As $k=>$v) {
if(!in_array($v['id'], $result)) $result[] = $v['id'];
$this->userDownline($v['id'], $result);
}
} else {
return $result;
}
}
答案 0 :(得分:1)
当然它会返回null,因为你在块if(count($ children))并且没有返回。
我认为你必须做这样的事情:
<?php
public function userDownline($userid, &$result = array())
{
$dbconn = $this->DBase();
$children = $dbconn->GetAll('SELECT id FROM users WHERE parent=' . (int)$userid);
if (count($children) > 0) {
foreach ($children As $k => $v) {
if (!in_array($v['id'], $result)) $result[] = $v['id'];
$this->userDownline($v['id'], $result);
}
}
return $result;
}
我在函数签名中添加了引用,并将条件块中的返回移出。
但这实际上是完全低效的方式和危险(因为 - 内存不足,嵌套级别太多和其他异常)。
有两种更好的方法: