Как получить общие значения из 2 коллекций Laravel
У меня есть 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
}
]
}
У вопроса есть решение - Посмотреть?

Сначала вы можете объединить обе коллекции с помощью "$array_merge = array_merge(collection1, collection2)"... После проверки "$array_unique = array_unique(array_column($array_merge, 'id'))"; а затем после " array_intersect_key($array_merge, $array_unique);"
Источник

Это дает мне объединенный массив, а не только общие значения
Источник

затем после применения "$array_unique = array_unique(array_column($array_merge, 'id'));"
Источник

Не могли бы вы написать ответ на это, чтобы я мог проверить?
Источник

Источник

Источник

@PrafullaKumarSahu не могли бы вы объяснить это в ответе?
Источник

@baig772 может быть мой ответ может дать вам некоторое представление, проверить его и дайте мне знать.
Источник
Ответы - Как получить общие значения из 2 коллекций Laravel / How to get the common values from 2 Laravel collections
Является ответом!

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

Это возвращает все элементы из
$collection1
мне нужны только общие

@baig772 если вы можете заметить, что первая коллекция 1-го массива совпадает со вторым массивом во второй коллекции и мой код возвращает этот общий массив в качестве результирующего набора, это не возвращает
$collection1
, который имеет 2 элемента, он возвращает только один элемент, который является общим.

@baig772 вы получили это решение?

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']);
}
Помочь в развитии проекта: