W3docs

Guide complet de la fonction array_keys en PHP

Découvrez la fonction array_keys de PHP : syntaxe, recherche par valeur, comparaison stricte et cas d'usage courants expliqués clairement.

array_keys() renvoie les clés (les indices) d'un array sous la forme d'un nouvel array réindexé numériquement. C'est l'un des moyens les plus courants d'inspecter la structure d'un array : on y a recours dès que l'on s'intéresse aux emplacements d'un array plutôt qu'aux valeurs qui y sont stockées.

Ce chapitre explique la syntaxe, le mode de recherche par valeur optionnel, la différence entre comparaison souple et stricte, ainsi que les patterns courants pour lesquels array_keys() est le bon outil.

Ce que fait array_keys()

Tout array PHP est une carte ordonnée de paires clé → valeur. La clé peut être un entier (comme dans un array indexé classique) ou une string (comme dans un array associatif). array_keys() ignore les valeurs et vous retourne uniquement les clés, dans leur ordre d'origine, renumérotées à partir de 0 :

  • Passez-lui un seul array et vous obtenez toutes les clés.
  • Passez-lui une valeur de recherche et vous n'obtenez que les clés dont la valeur correspond à cette valeur de recherche.

Le résultat est toujours un nouvel array, de sorte que l'original n'est jamais modifié. Si vous voulez les valeurs à la place, utilisez array_values() ; si vous avez seulement besoin de savoir si une clé spécifique est présente, array_key_exists() est plus efficace.

Syntaxe

array_keys(array $array, mixed $search_value = ?, bool $strict = false): array
ParamètreRequisDescription
$arrayOuiL'array dont on lit les clés.
$search_valueNonSi fourni, seules les clés dont la valeur est égale à ceci sont retournées.
$strictNonQuand true, utilise la comparaison stricte (===) pour la recherche, les types doivent donc aussi correspondre. Vaut false par défaut.

La fonction retourne toujours un array ; sans correspondance, elle retourne un array vide, jamais false.

Obtenir toutes les clés d'un array

L'utilisation la plus courante consiste à extraire toutes les clés d'un array associatif :

php— editable, runs on the server

Résultat :

Array
(
    [0] => a
    [1] => b
    [2] => c
)

L'array $keys retourné contient les trois clés string "a", "b" et "c", réindexées à partir de 0. Les valeurs (apple, banana, cherry) disparaissent — seules les clés demeurent.

Trouver les clés correspondant à une valeur

Passez un second argument et array_keys() se transforme en recherche : elle retourne la clé de chaque élément égal à cette valeur. C'est la principale différence avec array_search(), qui s'arrête à la première correspondance.

php— editable, runs on the server

Résultat :

Array
(
    [0] => 0
    [1] => 3
)

"apple" apparaît aux positions 0 et 3, donc les deux clés sont retournées. Si la valeur n'est pas trouvée du tout, vous obtenez un array vide.

Comparaison souple vs. stricte

Par défaut, la recherche par valeur utilise la comparaison souple (==), donc 1, "1" et 1.0 sont tous considérés comme égaux. Passez true comme troisième argument pour exiger une correspondance exacte de type et de valeur (===) :

<?php

$values = array("1", 1, "one", 1, "1");

// Loose: matches both strings and integers
print_r(array_keys($values, 1));

// Strict: matches only the integer 1
print_r(array_keys($values, 1, true));

?>

Résultat :

Array
(
    [0] => 0
    [1] => 1
    [2] => 3
    [3] => 4
)
Array
(
    [0] => 1
    [1] => 3
)

La recherche souple correspond à "1", 1, 1 et "1" (clés 0, 1, 3, 4), tandis que la recherche stricte ne correspond qu'aux deux entiers 1 (clés 1 et 3). Utilisez $strict = true dès que votre array mélange des strings et des nombres et que la distinction est importante.

Clés d'un array multidimensionnel

array_keys() n'examine que le premier niveau — elle retourne les clés de l'array externe et ne descend jamais dans les arrays imbriqués. Avec un array multidimensionnel, vous récupérez les clés externes :

<?php

$matrix = array(
    "row1" => array("a" => 1, "b" => 2),
    "row2" => array("c" => 3),
);
print_r(array_keys($matrix));

?>

Résultat :

Array
(
    [0] => row1
    [1] => row2
)

Pour collecter également les clés internes, parcourez le résultat et appelez array_keys() sur chaque sous-array.

Itérer sur les clés

Un pattern fréquent consiste à parcourir une structure par ses clés. Comme array_keys() fournit une liste propre, vous pouvez l'utiliser directement dans une boucle foreach :

<?php

$prices = array("pen" => 1.20, "book" => 5.00, "bag" => 12.50);

foreach (array_keys($prices) as $item) {
    echo $item . PHP_EOL;
}

?>

Résultat :

pen
book
bag

Dans le code quotidien, on utiliserait souvent foreach ($prices as $item => $price) à la place — mais array_keys() est pratique quand vous avez besoin de la liste des clés en tant que valeur (pour la passer quelque part, la compter ou comparer les clés de deux arrays).

Cas d'usage courants et pièges à éviter

  • Compter les clés : count(array_keys($arr)) est identique à count($arr) — préférez directement count($arr).
  • Vérifier l'existence d'une clé : n'utilisez pas in_array($k, array_keys($arr)) — utilisez array_key_exists() ou isset(), qui sont plus rapides et plus clairs. (Pour tester une valeur, utilisez in_array().)
  • Le résultat est toujours réindexé : les clés propres de l'array retourné sont 0, 1, 2, … quelles que soient les clés d'origine.
  • Aucune correspondance retourne [] : la forme avec recherche par valeur ne retourne jamais false, donc testez-la avec empty() ou count(), et non === false.

Conclusion

array_keys() extrait les clés d'un array, éventuellement filtrées par valeur avec une comparaison souple ou stricte. Utilisez-la pour lister les clés, trouver toutes les positions d'une valeur, ou alimenter une boucle avec une liste de clés. Pour les valeurs correspondantes, utilisez array_values() ; pour tester une clé unique, utilisez array_key_exists() ; et pour trouver la première correspondance d'une valeur, utilisez array_search().

Pratique

Pratique
Quel est le rôle de la fonction array_keys() en PHP ?
Quel est le rôle de la fonction array_keys() en PHP ?
Was this page helpful?