我有递归功能。有一个层次结构的用户结构。我将一个用户ID发送到我的函数,它应该找到所有用户。函数返回所有关联用户的数组。我的任务是找到这些用户的级别。
例如:
User1
/ \
User2 User3
/ \ \
User4 User5 User6
User1的级别为0。 User2,User3具有级别1。 User4,User5,User6具有级别2。 我怎样才能在递归中找到这个? 这是我的代码:
private function getAssociates($userId) {
global $generation;
global $usersUnder;
if (!isset($generation)) {
$generation = 1;
}
$userDb = new Lyf_DB_Table('user');
$associatesSelect = $userDb->Select();
$associatesSelect -> from('user', array('id'))->where('enroller_id = ?', $userId);
$associates = $userDb->fetchAll($associatesSelect)->toArray();
if (!empty($associates)) {
foreach ($associates as $associate) {
$usersUnder[$generation] = $associate['id'];
$this->getAssociates($associate['id']);
}
}
return $usersUnder;
}
答案 0 :(得分:5)
为getAssociates()
功能添加额外参数:
private function getAssociates($userID, $level = 0) {
当你处理树的那个级别时,将$level
与其余的用户数据一起存储,然后递归到函数中:
$this->getAssociates($associate['id'], $level + 1);
当您最初调用该函数以启动此过程时,为0
传递$level
,或将其留空并让PHP分配默认值(也0
)。
答案 1 :(得分:3)
看看迭代器:
$user_array= array('1',array(array('2')));
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($user_array));
foreach($it as $user){
print_r($it->getDepth());
}
答案 2 :(得分:1)
很简单,但我不在zend工作,所以我不能告诉你代码,但我可以给你描述
制作功能
function getLevel($id,$level=0){
take from db(higher lever higher_id if exist){
$level++
$level = getLevel(higher_id,$level);
}
return $level;
}
他们打电话
$level = getLevel($id);