Вы используете неправильную конструкцию для своих данных, если хотите избежать итерации массива.
//function to search the set and stop on first hit
function exists_in_set (&$set, $key, $value) {
foreach ($set as $row) {
if (isset($row[$key]) && $row[$key] = $value)
return true;
}
return false;
}
//now for your
// if key and value exists anywhere in array
// do something;
if (exists_in_set($set, $key, $value)) {
//do something
}
РЕДАКТИРОВАТЬ: Почему array_filter не является лучшим решением
источник: http://php.net/manual/en/function.array-filter.php
Перебирает каждое значение во входном массиве, передавая его функции обратного вызова. Если функция обратного вызова возвращает true, текущее значение из input возвращается в массив результатов. Ключи массива сохранены.
array_filter перебирает каждое значение и, следовательно, будет медленнее на больших наборах, потому что не останавливается при первом попадании.
И во-вторых, поскольку вы не хотите итерировать набор, предполагая, что это для производительности, функция анонимного обратного вызова, используемая в методе array_filter, намного медленнее, это различие более заметно в таких системах, как apc_cache, функция не может быть оптимизирована должен быть выполнен как есть во время выполнения.