(PHP 8 >= 8.4.0)
array_find — Возвращает первый элемент, который удовлетворяет callback-функции
Функция array_find() возвращает значение первого элемента
массива (array ), для которого callback-функция вернула true .
Функция вернёт null , если не найдёт ни одного элемента, который удовлетворяет условиям поиска.
arraycallbackCallback-функция, которую функция вызовет для проверки элементов входного массива, со следующей сигнатурой:
Функция array_find() вернёт значение и не станет вызывать callback-функцию для других элементов, если функция обратного вызова вернётtrue .
Функция возвращает значение первого элемента, для которого
callback-функция вернула true . Функция вернёт null ,
если не найдёт элемент, который удовлетворяет условиям поиска.
Пример #1 Пример поиска функцией array_find() первого значения, которое удовлетворяет callback-функции
<?php
$array = [
'a' => 'dog',
'b' => 'cat',
'c' => 'cow',
'd' => 'duck',
'e' => 'goose',
'f' => 'elephant'
];
// Найдём название первого животного, которое длиннее 4 символов
var_dump(array_find($array, function (string $value) {
return strlen($value) > 4;
}));
// Найдём название первого животного, которое начинается с буквы f
var_dump(array_find($array, function (string $value) {
return str_starts_with($value, 'f');
}));
// Найдём название первого животного, первая буква которого совпадает с ключом
var_dump(array_find($array, function (string $value, $key) {
return $value[0] === $key;
}));
// Найдём название первого животного, ключ которого соответствует регулярному выражению
var_dump(array_find($array, function ($value, $key) {
return preg_match('/^([a-f])$/', $key);
}));
?>Результат выполнения приведённого примера:
string(5) "goose" NULL string(3) "cow" string(3) "dog"
A simple fallback For older PHP versions, that do not have array_find:
<?php
/**
* Porting of PHP 8.4 function
*
* @template TValue of mixed
* @template TKey of array-key
*
* @param array<TKey, TValue> $array
* @param callable(TValue $value, TKey $key): bool $callback
* @return ?TValue
*
* @see https://www.php.net/manual/en/function.array-find.php
*/
function array_find(array $array, callable $callback): mixed
{
foreach ($array as $key => $value) {
if ($callback($value, $key)) {
return $value;
}
}
return null;
}
?>Note that if null satisfies the callback then there is no way to tell if null was returned because it was found in the array or if it was because nothing satisfying the callback was found.
In this case, it'll be more robust to use array_find_key; null can't be a key, so if that's what you get it must be because the search failed to find a match.
Obviously, you'd then use the array key to look up the corresponding value in the array.