【问题标题】:Building an array in nested foreach loops in Laravel controller在 Laravel 控制器的嵌套 foreach 循环中构建数组
【发布时间】:2020-05-19 17:38:16
【问题描述】:

我正在尝试使用 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);

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

【问题讨论】:

    标签: php arrays laravel


    【解决方案1】:

    每次迭代都将一个新数组分配给$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);
    

    【讨论】:

      【解决方案2】:

      您正在添加 id 为 $publisherTeam->members->pluck('id')->toarray(); 的数组作为 $teamUserIds 中的新索引。但你要做的是merge ids 数组

      所以你的代码会是这样的:

      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);
      

      【讨论】:

      • 太棒了。谢谢。
      猜你喜欢
      • 2021-11-14
      • 2020-03-17
      • 1970-01-01
      • 2014-08-08
      • 2021-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-17
      相关资源
      最近更新 更多