为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
largeQ 2023-04-02 10:21:49
我正在尝试使用 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);但是我得到了多个数组,而不仅仅是一个已编译的数组,而且计数不起作用。知道我做错了什么吗?
查看完整描述

2 回答

?
慕仙森

TA贡献1827条经验 获得超7个赞

您正在为每次迭代分配一个新数组$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);


查看完整回答
反对 回复 2023-04-02
?
www说

TA贡献1775条经验 获得超8个赞

您正在将 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);


查看完整回答
反对 回复 2023-04-02
  • 2 回答
  • 0 关注
  • 96 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信