$search = array_filter($arr, function (array $item) use ($needle) {
foreach($needle as $key => $value) {
if (!isset($item[$key]) || $item[$key] !== $value) {
return false;
}
}
return true;
}
И еще вариантик....
$search = array_filter($arr, function (array $item) use ($needle) {
return $needle == array_intersect_key($item, $needle);
}
и еще один... если вам надо индекс найти... это же и для in_array будет работать если вам нужно только проверить.
$search = array_search($needle, array_map(function (array $item) use ($needle) {
return array_intersect_keys($item, $needle);
}, $arr, false),
Обновил код, перепутал местами аргументы для array_intersect_key.
Добавляю быструю реализацию. Быстрее выше перечисленных (кроме первой) раз в 6.
$search = [];
foreach ($arr as $item) {
if ($needle == array_intersect_key($item, $needle)) {
$search[] = $item;
}
}