在 Laravel 控制器的嵌套 foreach 循环中构建数组

我正在尝试使用 Laravel 控制器中的嵌套 foreach 循环,从长期的雄辩关系中构建一个用户 ID 数组,但无法使其正常工作。


用户可以有发布者,这些发布者可以有团队,每个团队都有成员。用户可以在多个团队中,因此我还需要删除重复的 ID。


我想以一个计数结束,看看有多少团队成员与用户相关联。


在我的用户模型中


public function publishers()

{

    return $this->belongsToMany('App\Publisher')->withTimestamps();

}

在我的发布者模型中


public function teams()

{

  return $this->belongsToMany('App\Team')->withTimestamps();

}

在我的团队模型中


public function members()

{

  return $this->belongsToMany('App\User')->withPivot('status', 'title', 'team_role_ids')->withTimestamps();

}

在我的配置文件控制器中


foreach ($user->publishers as $userPublisher) {

  foreach ($userPublisher->teams as $publisherTeam) {

    $teamUserIds[] = $publisherTeam->members->pluck('id')->toarray();

  }

}

$deDupedIds = array_unique($teamUserIds, SORT_NUMERIC);

$idsCount = count($deDupedIds);

但是我得到了多个数组,而不仅仅是一个已编译的数组,而且计数不起作用。知道我做错了什么吗?


largeQ
浏览 73回答 2
2回答

慕仙森

您正在为每次迭代分配一个新数组$teamUserIds。这就是您获得多个阵列的原因。$teamUserIds = [];foreach ($user->publishers as $userPublisher) {  foreach ($userPublisher->teams as $publisherTeam) {    $teamUserIds = array_merge($teamUserIds, $publisherTeam->members->pluck('id')->toarray());  }}$deDupedIds = array_unique($teamUserIds, SORT_NUMERIC);$idsCount = count($deDupedIds);

www说

您正在将 id 数组添加$publisherTeam->members->pluck('id')->toarray();为$teamUserIds. 但你想要做的是mergeids 数组所以你的代码会是这样的:foreach ($user->publishers as $userPublisher) {  foreach ($userPublisher->teams as $publisherTeam) {    $teamUserIds = array_merge($teamUserIds , $publisherTeam->members->pluck('id')->toarray());  }}$deDupedIds = array_unique($teamUserIds, SORT_NUMERIC);$idsCount = count($deDupedIds);
打开App,查看更多内容
随时随地看视频慕课网APP