提问者:小点点

laravel集合删除项目


我有以下收藏

     Collection {#430 ▼
  #items: array:54 [▼
    0 => {#435 ▼
      +"name": "Persona 5"
      +"cover": "cover_persona-5_playstation-3.png"
      +"bio": "This is a syno"
      +"all_nb_rank": null
      +"platform_name": "Sony Playstation 3"
      +"tag_name": "RPG"
      +"developper": "Deep Silver"
      +"publisher": "Atlus"
    }
    1 => {#437 ▼
      +"name": "Persona 5"
      +"cover": "cover_persona-5_playstation-3.png"
      +"bio": "This is a syno"
      +"all_nb_rank": null
      +"platform_name": "Sony Playstation 3"
      +"tag_name": "Turn based"
      +"developper": "Deep Silver"
      +"publisher": "Atlus"
    }
    2 => {#436 ▼
      +"name": "Persona 5"
      +"cover": "cover_persona-5_playstation-3.png"
      +"bio": "This is a syno"
      +"all_nb_rank": null
      +"platform_name": "Sony Playstation 3"
      +"tag_name": "Simulation"
      +"developper": "Deep Silver"
      +"publisher": "Atlus"
    }
//

我想进入另一个集合“tag_name”行,然后从主集合中删除它,并删除重复的值,以便得到这样的东西:

     Collection {#430 ▼
  #items: array:1 [▼
    0 => {#435 ▼
      +"name": "Persona 5"
      +"cover": "cover_persona-5_playstation-3.png"
      +"bio": "This is a syno"
      +"all_nb_rank": null
      +"platform_name": "Sony Playstation 3"
      +"developper": "Deep Silver"
      +"publisher": "Atlus"
    }

    Collection {#490 ▼
  #items: array:3 [▼
    0 => "RPG"
    1 => "Turn based"
    2 => "Simulation"
  ]
}

我已经设法通过使用“tag_name”行进入另一个集合

$tags = $collection->pluck('tag_name');

我还计划使用unique()集合方法来合并重复的值。

但是我不知道我应该如何处理,以便从主收藏中删除“tag_name”。

我尝试使用forget()和slice()方法,但不起作用。我知道我可以将其制作成一个简单的数组,然后使用PHP unset()函数,但我想知道如何使用Laravel收集方法来实现


共3个答案

匿名用户

方法的作用正是您所需要的。它从集合中删除一个或多个键:

$persona = collect([     
    'name' => 'Persona 5',
    'cover' => 'cover_persona-5_playstation-3.png',
    'bio' => 'This is a syno',
    'all_nb_rank": nul',
    'platform_name' => 'Sony Playstation 3',
    'tag_name' => 'RPG',
    'developper' => 'Deep Silver',
    'publisher' => 'Atlus'
]);

$result = $persona->except(['tag_name']);

$personasWithOutTagName = $personas->except(['tag_name']);

这将导致:

[
    'name' => 'Persona 5',
    'cover' => 'cover_persona-5_playstation-3.png',
    'bio' => 'This is a syno',
    'all_nb_rank": nul',
    'platform_name' => 'Sony Playstation 3',
    'developper' => 'Deep Silver',
    'publisher' => 'Atlus'
];

对角色集合中的所有项目执行此操作时,您可以执行以下操作:

$result = $personas->map(function ($person) {
    return collect($person)->except(['tag_name'])->all();
});

$result将是除标记名键之外的所有角色的集合。

匿名用户

您可以通过做一些小动作来使用forget(),因为forget()只对集合对象有效。

$collections = $collections->map(function ($c) {
    return collect($c)->forget('tag_name');
});
return $collections;

匿名用户

分区方法可用于将集合分成一个或多个集合,具体取决于真值测试的逻辑。将其与列表方法一起使用,如下面的示例所示:

https://laravel.com/docs/5.5/collections#method-分割

另一个选项是mapToGroups方法。

https://laravel.com/docs/5.5/collections#method-映射组