array_find_key

array_find_key($array, $callback)

Parcourt un tableau et renvoie la clé du premier élément pour lequel la condition renvoie true. S’il n’y a pas d’élément de ce type, elle renvoie null. La fonction existe depuis PHP 8.4.

Paramètres

  • $array – le tableau dans lequel chercher.
  • $callback – une fonction qui reçoit la valeur et la clé d’un élément et renvoie true quand c’est l’élément cherché.

Exemples

$users = array(15 => "jeanne@exemple.fr", 27 => "pierre@exemple.fr", 31 => "eve@exemple.fr");
var_dump(array_find_key($users, fn($email) => str_starts_with($email, "pierre@"))); // int(27)
var_dump(array_find_key($users, fn($email) => $email === "personne@exemple.fr")); // NULL
// une valeur null trouvée se distingue de « non trouvé » par la clé
$settings = array("couleur" => null, "taille" => 12);
var_dump(array_find($settings, fn($v) => $v === null)); // NULL
var_dump(array_find_key($settings, fn($v) => $v === null)); // string(7) "couleur"
// la clé 0 est un résultat valable - comparez avec null
$key = array_find_key(array("a", "b"), fn($v) => $v === "a");
var_dump($key !== null); // bool(true)

Remplacement pour les anciennes versions de PHP

Dans les versions antérieures à PHP 8.4, la fonction n’existe pas. Le code ci-dessous ne l’ajoute que là où elle manque, les versions récentes utilisent la fonction intégrée.

if (!function_exists("array_find_key")) {
    function array_find_key(array $array, callable $callback) {
        foreach ($array as $key => $value) {
            if ($callback($value, $key)) {
                return $key;
            }
        }
        return null;
    }
}
var_dump(array_find_key(array(15 => "jeanne", 27 => "pierre"), function ($v) { return $v === "pierre"; })); // int(27)

Points d’attention

  • Quand l’élément n’existe pas, elle renvoie null, pas false comme array_search().
  • La clé 0 ou "" est un résultat valable. Comparez avec === null, pas avec la condition if ($key).
  • Pour chercher une valeur exacte, array_search() est plus simple.

Fonctions associées :
array_find()
array_search()
array_key_exists()
array_any()