В зависимости от цели делать можно по разному.
1. Простой перебор вложенными циклами, в качестве результата выводим id совпадающих элементов.
$arr1 = [
1 => ['id' => 1, 'name' => 'DJ'],
2 => ['id' => 2, 'name' => 'Bass'],
3 => ['id' => 3, 'name' => 'Vocal'],
];
$arr2 = [
['name' => 'Alex', 'specId' => 1],
['name' => 'Tim', 'specId' => 2],
['name' => 'Dave', 'specId' => 2],
];
$result = [];
foreach ($arr1 as $arr1_item) {
foreach ($arr2 as $arr2_item) {
if ($arr1_item['id'] == $arr2_item['specId']) {
$result[$arr1_item['id']] = $arr1_item['id'];
}
}
}
var_export($result);
2. Тоже перебор, но без явных циклов - комбинируем встроенные функции обработки массивов. В качестве результата возвращаем 1й массив, в котором оставлены только совпадающие со 2м элементы.
$arr1 = [
1 => ['id' => 1, 'name' => 'DJ'],
2 => ['id' => 2, 'name' => 'Bass'],
3 => ['id' => 3, 'name' => 'Vocal'],
];
$arr2 = [
['name' => 'Alex', 'specId' => 1],
['name' => 'Tim', 'specId' => 2],
['name' => 'Dave', 'specId' => 2],
];
$result = array_filter($arr1, function ($item1) use ($arr2) {
return in_array(
true,
array_map(function ($item2) use ($item1) {
return $item2['specId'] == $item1['id'];
}, $arr2)
);
});
var_export($result);