【发布时间】:2020-04-07 05:39:33
【问题描述】:
我的实体:
class User{
id : int
name : string
boss : User()
}
我想创建一个函数,该函数返回在给定用户下工作的用户数组()。 示例:
public function MyEmployers( User $user , array $usersList )
{
$myEmployers = array();
...
return $myEmployers;
}
$results = $this->myEmployers ( $employer1 , $allEmployers)
dump ( $results );
$results = [ 4 , 5 , 6 ];
如果有人可以随意改进,我找到了解决方案:
public $tree = array();
public function MyEmployers(User $user)
{
$superior_key_id = array();
$all_users = $this->getallusers();
$id = $user->getId();
foreach ($all_users as $user) {
if ($user->getSuperior())
$superior_key_id[$user->getSuperior()->getId()][] = $user;
}
$this->getSubEmployee($this->getUser(), $superior_key_id);
return ($this->tree);
}
public function getSubEmployee($user, $superior_key_id)
{
if (isset($superior_key_id[$user->getId()])) {
foreach ($superior_key_id[$user->getId()] as $user) {
$this->tree[] = $user;
$this->getSubEmployee($user, $superior_key_id);
}
}
return $user;
}
如果你有兴趣,这个会得到所有老板:
public function MyBosses(User $user)
{
$bosses = array();
while ($user->getSuperior()) {
array_push($bosses, $user->getSuperior());
$user = $user->getSuperior();
}
return $bosses;
}
【问题讨论】:
-
那么,如果我问谁在
boss下工作,我会返回employer1到empoyer6?或者只是employer1和employer2? -
每个人都在老板手下工作,结果将是这样的 $results = [1 , 2 , 3 , 4 , 5 , 6 ];