Фильтрация или, возможно, операция сопоставления с использованием коллекций в Laravel - PullRequest
0 голосов
/ 04 марта 2020

Похоже, у меня тут тупой момент. У меня есть коллекция, которую я пытаюсь отфильтровать на основе нескольких условий. Вот массив:

$files =[
   [
     "customisation_id" => "2357323",
     "file_type" => 2,
     "url" => "transparent/76caa009d0c2aa32793a8f48ad395dcb_616351.png.png"
  ],
  [
     "customisation_id" => "2357323",
     "file_type" => 3,
     "url" => "nonTransparent/5ae5a3ec64a35ebcaa26e211244c24a4_826308.jpg.png"
  ],
  [
     "customisation_id" => "2357324",
     "file_type" => 2,
     "url" => "transparent/5ae5a3ec64a35ebcaa26e211244c24a4_826308.jpg.gif"
  ],
  [
     "customisation_id" => "2357324",
     "file_type" => 3,
     "url" => "nonTransparent/64dc36fc492a87cf96f1fd2346e60dd3_560667.jpg.png"
  ],
  [
      "customisation_id" => "2357350",
      "file_type" => 2,
      "url" => "transparent/64dc36fc492a87cf96f1fd2346e60dd3_560667.jpg.gif"
  ],
  [
      "customisation_id" => "2357355",
      "file_type" => 3,
      "url" => "transparent/64dc36fc492a87cf96f1fd2346e60dd3_560667.jpg.gif"
   ]
];

Я хотел бы создать из него новый массив, который имеет file_type of 2 без повторяющихся записей с таким же customisation_id. Однако, если нет повторяющейся записи в терминах customer_id, просто добавьте ее в коллекцию. ПРИМЕЧАНИЕ: Я использую массивы взаимозаменяемо с коллекцией, поскольку собираюсь использовать коллекцию для нее. В идеале я хочу новый массив или коллекцию со следующей структурой:

$files =[
   [
     "customisation_id" => "2357323",
     "file_type" => 2,
     "url" => "transparent/76caa009d0c2aa32793a8f48ad395dcb_616351.png.png"
  ],
  [
     "customisation_id" => "2357324",
     "file_type" => 2,
     "url" => "transparent/5ae5a3ec64a35ebcaa26e211244c24a4_826308.jpg.gif"
  ],
  [
      "customisation_id" => "2357350",
      "file_type" => 2,
      "url" => "transparent/64dc36fc492a87cf96f1fd2346e60dd3_560667.jpg.gif"
  ],
  [
      "customisation_id" => "2357355",
      "file_type" => 3,
      "url" => "transparent/64dc36fc492a87cf96f1fd2346e60dd3_560667.jpg.gif"
   ]
];

Я уже пробовал фильтровать, отображать и сокращать методы сбора, которые решают первую часть головоломки, но затем я застреваю со вторым условием.
Спасибо!

1 Ответ

0 голосов
/ 04 марта 2020
$newArray = collect($files)->unique('customisation_id')->values()->all();

Вы также должны прочитать о intersect(): https://laravel.com/docs/6.x/collections#method -пересекающееся

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...