Vérifier si un tableau est associatif en PHP : erreurs fréquentes

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Comment vérifier si un tableau est associatif ou séquentiel en PHP : les erreurs les plus fréquentes

\n\n

Avez-vous déjà écrit une boucle foreach et obtenu un résultat inattendu ? Ou peut-être avez-vous passé un tableau à une fonction qui attendait une liste, mais elle a reçu un tableau associatif avec des clés sous forme de chaînes ? Si oui, vous n'êtes pas seul. La question « How to check if PHP array is associative or sequential? » fait partie des plus populaires sur Stack Overflow avec des milliers de vues. Et ce n'est pas un hasard : la confusion entre les types de tableaux est l'un des pièges majeurs pour les développeurs PHP.

\n\n

Dans cet article, nous allons voir ce qui distingue les tableaux associatifs des tableaux séquentiels, analyser les erreurs courantes et vous fournir des solutions qui fonctionnent. C'est parti !

\n\n

Qu'est-ce qu'un tableau séquentiel et un tableau associatif ?

\n\n

En PHP, il n'existe pas de séparation stricte entre « listes » et « dictionnaires » comme en Python ou JavaScript. Un seul type — array — peut être l'un ou l'autre. Mais en pratique, il est essentiel de comprendre la différence :

\n\n
    \n
  • Tableau séquentiel (sequential) — les clés se suivent dans l'ordre : 0, 1, 2, 3... sans interruption. Exemple : ['pomme', 'poire', 'cerise'].
  • \n
  • Tableau associatif — les clés sont des chaînes ou des nombres qui ne se suivent pas. Exemple : ['nom' => 'Jean', 'age' => 30].
  • \n
\n\n

Cela semble simple. Pourtant, les développeurs commettent souvent des erreurs en essayant de déterminer manuellement le type d'un tableau. Passons en revue les erreurs les plus courantes.

\n\n

Erreur n°1 : Utiliser array_keys() et comparer avec range

\n\n

L'une des approches les plus répandues consiste à récupérer les clés du tableau, générer une séquence de 0 à count($array)-1 et les comparer. Cela semble logique, mais il y a des subtilités.

\n\n
// Exemple d'approche erronée\nfunction isSequential($arr) {\n    return array_keys($arr) === range(0, count($arr) - 1);\n}\n\n$test = ['a', 'b', 'c'];\nvar_dump(isSequential($test)); // true — correct\n\n$test2 = ['x' => 1, 'y' => 2];\nvar_dump(isSequential($test2)); // false — correct\n\n$test3 = [0 => 'a', 2 => 'b'];\nvar_dump(isSequential($test3)); // false — correct\n\n$test4 = ['0' => 'a', '1' => 'b'];\nvar_dump(isSequential($test4)); // ??? \n
\n\n

Le problème est que PHP convertit automatiquement les clés sous forme de chaînes en entiers si elles ressemblent à des nombres. ['0' => 'a', '1' => 'b'] est en réalité un tableau séquentiel, mais notre fonction peut donner un résultat inattendu à cause de la comparaison stricte (===).

\n\n

Conclusion : cette approche fonctionne, mais seulement si vous êtes sûr du type des clés. Pour la production, il est préférable d'utiliser des méthodes plus robustes.

\n\n

Erreur n°2 : Vérifier uniquement la première clé

\n\n

Certains développeurs pensent : « Si la première clé est 0, alors le tableau est séquentiel ». C'est une idée dangereuse.

\n\n
function isSequentialByFirstKey($arr) {\n    if (empty($arr)) return true;\n    return array_key_first($arr) === 0;\n}\n\n$bad = [0 => 'a', 'nom' => 'Jean'];\nvar_dump(isSequentialByFirstKey($bad)); // true — alors que ça devrait être false !\n
\n\n

La première clé est 0, mais le tableau est clairement associatif. Cette vérification laissera passer les tableaux mixtes, qui sont fréquents dans les projets réels.

\n\n

Conclusion : ne jugez jamais un tableau sur son premier élément. Vérifiez toutes les clés.

\n\n

Erreur n°3 : Ignorer les tableaux vides

\n\n

Un tableau vide [] est-il à la fois séquentiel et associatif ? Du point de vue de PHP, oui. Mais certaines fonctions échouent.

\n\n
function isAssociative($arr) {\n    return count(array_filter(array_keys($arr), 'is_string')) > 0;\n}\n\nvar_dump(isAssociative([])); // false — le tableau vide n'est pas associatif\nvar_dump(isAssociative([1, 2, 3])); // false — correct\n
\n\n

Cela semble logique, mais si vous vous attendez à ce que la fonction retourne true pour un tableau vide (comme pour un tableau associatif), vous vous trompez. Un tableau vide est un cas particulier.

Blogs

Book Recommendations