Как получить общие значения из 2 коллекций Laravel


Как получить общие значения из 2 коллекций Laravel

19.04.2019 01:20:50 Просмотров 74 Источник

У меня есть 2 коллекции в Laravel,и я хочу только общие значения в моем $resultработает только для 1D массива. Ниже приведены коллекции

$collection->intersect()

Теперь в моем результате, мне просто нужно это

Collection {#1086 ▼
  #items: array:5 [▼
    0 => {#1115 ▼
      +"name": "Light"
      +"class": "ABC"
      +"id": 4
    }
    1 => {#1113 ▼
      +"name": "Milo"
      +"class": "XYZ"
      +"id": 10
    }
    2 => {#1120 ▼
      +"name": "Milo Test"
      +"class": "ABC"
      +"id": 12
    }
    3 => {#1102 ▼
      +"name": "KMSMiloCow"
      +"class": "ABC"
      +"id": 16
    }
    4 => {#1106 ▼
      +"name": "MiloCows"
      +"class": "XYZ"
      +"id": 18
    }
  ]
}

Collection {#1086 ▼
      #items: array:5 [▼
        0 => {#1115 ▼
          +"name": "Light"
          +"class_name": "ABC"
          +"id": 4
        }           
      ]
    }
У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/55760328/how-to-get-the-common-values-from-2-laravel-collections#comment98195706_55760328
Сначала вы можете объединить обе коллекции с помощью "$array_merge = array_merge(collection1, collection2)"... После проверки "$array_unique = array_unique(array_column($array_merge, 'id'))"; а затем после " array_intersect_key($array_merge, $array_unique);"
https://stackoverflow.com/questions/55760328/how-to-get-the-common-values-from-2-laravel-collections#comment98195796_55760328
Это дает мне объединенный массив, а не только общие значения
https://stackoverflow.com/questions/55760328/how-to-get-the-common-values-from-2-laravel-collections#comment98195820_55760328
затем после применения "$array_unique = array_unique(array_column($array_merge, 'id'));"
https://stackoverflow.com/questions/55760328/how-to-get-the-common-values-from-2-laravel-collections#comment98195854_55760328
Не могли бы вы написать ответ на это, чтобы я мог проверить?
https://stackoverflow.com/questions/55760328/how-to-get-the-common-values-from-2-laravel-collections#comment98196345_55760328
@PrafullaKumarSahu не могли бы вы объяснить это в ответе?
https://stackoverflow.com/questions/55760328/how-to-get-the-common-values-from-2-laravel-collections#comment98196528_55760328
@baig772 может быть мой ответ может дать вам некоторое представление, проверить его и дайте мне знать.

Ответы - Как получить общие значения из 2 коллекций Laravel / How to get the common values from 2 Laravel collections

Является ответом!
Prafulla Kumar Sahu

19.04.2019 02:11:06

Я думаю, используя метод сбора eachи contains, это можно сделать так

    $collection1->each(function ($value, $key) use ($collection2){
        return $collection2->contains($value);
    });
    dd($collection1);

Я тестирую его в routes file web.PHP вроде

use Illuminate\Support\Collection;
Route::get('test', function(){
    $collection1 = new Collection([
        'bear',
        'whale',
        'chicken',
        'tardigrade'
    ], [[
        'bear8',
        'whale44',
        'chicken45',
        'tardigrade445'
    ]]);
    $collection2 = new Collection([
        'bear1',
        'whale2',
        'chicken3',
        'tardigrade4'
    ], [[
        'bear',
        'whale',
        'chicken',
        'tardigrade'
    ]]);
    $collection1->each(function ($value, $key) use ($collection2){
        return $collection2->contains($value);
    });
    dd($collection1);
});
https://stackoverflow.com/questions/55760328/how-to-get-the-common-values-from-2-laravel-collections/55760946#comment98196875_55760946
Это возвращает все элементы из $collection1мне нужны только общие
https://stackoverflow.com/questions/55760328/how-to-get-the-common-values-from-2-laravel-collections/55760946#comment98196942_55760946
@baig772 если вы можете заметить, что первая коллекция 1-го массива совпадает со вторым массивом во второй коллекции и мой код возвращает этот общий массив в качестве результирующего набора, это не возвращает $collection1, который имеет 2 элемента, он возвращает только один элемент, который является общим.
https://stackoverflow.com/questions/55760328/how-to-get-the-common-values-from-2-laravel-collections/55760946#comment98213401_55760946
@baig772 вы получили это решение?
guruprasad ks

19.04.2019 02:30:36

попробовать это

 $a1 = array(
           array('name' => 'asdfjkl;', 'class' => 'foo'),
           array('name' => 'qwerty', 'class' => 'bar'),
           array('name' => 'uiop', 'class' => 'baz'),
        );
$a2 = array(
           array('name' => 'asdfjklk;', 'class' => 'foo'),
           array('name' => 'qwertyxs', 'class' => 'bar'),
           array('name' => 'uiop', 'class' => 'baz'),
        );
$cc = array_uintersect($a1, $a2, 'cmp');
print_r($cc);

function cmp($a1, $a2){
   return strcasecmp($a1['name'] , $a2['name']);
}
Amir H

05.12.2019 11:20:51

Я понятия не имею, поможет вам это или нет, но они будут полезны

$common_collection = $collection_1->whereIn('id', $collection_2->pluck('id')->toArray())
    ->unique('id')
    ->sortBy('id');
Помочь в развитии проекта:
Закрыть X