【问题标题】:remove duplicates from laravel array从 laravel 数组中删除重复项
【发布时间】:2021-08-01 21:38:06
【问题描述】:
foreach ($this->data as $row) {
$year = $row[$dataPositions['year']];
$name = $row[$dataPositions['name']];


$foundgames = &$this->foundgames;

    $game = $games->first(function($game, $key) use ($year, $name) {
    if ( $year === $game->year && $game->name === $name ) {
    return true;
    }
});
if ($game) {
    $game->number = $number;
    $game->catalog_name = $name;

    $this->foundgames[] = $game;

    $games = $games->filter(function($gam) use ($game) {
        return $game->id !== $gam->id;
    });
}

}

此时我正确地 gwr 第一场比赛,其他比赛将变为假,但如果某些重复匹配,我如何才能让所有比赛都为假?

【问题讨论】:

  • 不清楚你在问什么。你能解释一下你想要的结果吗?
  • $this->data 数据量大,哪里有重复。 $games -> 游戏当前数据库如果有重复,需要从 $game = $games->first(function($game, $key) use ($year, $name) { 中删除它
  • 所以您想删除集合中的重复对象,还是?
  • 正确,仅按年份和名称值唯一

标签: php arrays laravel laravel-5 filter


【解决方案1】:

您可以在集合上使用groupBy 方法将games 按其id 分组,然后使用reject 方法删除任何count 不等于1 的对象。

我不知道您的game 集合/对象的确切结构,但是,以下提供了基本概念。

$collection = collect([
    ['id' => 1],
    ['id' => 2],
    ['id' => 2],
    ['id' => 3],
]);

$uniques = $collection->groupBy('id')->reject(function ($item) {
    return $item->count() !== 1;
});

dump($uniques); // outputs 1 & 3

【讨论】:

  • 谢谢,但我需要过滤 2 个值游戏名称和年份,按游戏->groupBy(['name', 'year'])->reject(function ($item) { 我得到零结果,
  • @user7943875 您能否更新您的问题以包含您的集合的数据结构示例。这将有助于提供准确的答案。
猜你喜欢
  • 2011-06-29
  • 2011-01-04
  • 2013-08-03
  • 2017-11-06
  • 2019-03-15
相关资源
最近更新 更多