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ètre | Requis | Description |
|---|---|---|
$array | Oui | L'array dont on lit les clés. |
$search_value | Non | Si fourni, seules les clés dont la valeur est égale à ceci sont retournées. |
$strict | Non | Quand 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 :
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.
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
bagDans 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 directementcount($arr). - Vérifier l'existence d'une clé : n'utilisez pas
in_array($k, array_keys($arr))— utilisezarray_key_exists()ouisset(), qui sont plus rapides et plus clairs. (Pour tester une valeur, utilisezin_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 jamaisfalse, donc testez-la avecempty()oucount(), 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().