W3docs

Fonction PHP array_diff_assoc

La fonction PHP array_diff_assoc compare deux ou plusieurs tableaux et retourne les différences basées sur leurs clés et valeurs.

La fonction PHP array_diff_assoc() compare deux tableaux ou plus et retourne les entrées du premier tableau qui sont absentes de tous les autres. Contrairement à array_diff(), qui ne s'intéresse qu'aux valeurs, array_diff_assoc() vérifie à la fois la clé et la valeur — ainsi, une paire survit à la comparaison uniquement si aucun autre tableau ne contient cette clé exacte associée à cette valeur exacte. C'est l'outil idéal pour comparer des tableaux associatifs.

Cette page couvre la syntaxe, le fonctionnement de la correspondance clé + valeur, la différence avec array_diff(), le piège de la comparaison souple (string), et un exemple avec plusieurs tableaux.

Syntaxe

array_diff_assoc(array $array, array ...$arrays): array
  • $array — le tableau à comparer depuis. Ses entrées survivantes forment le résultat.
  • ...$arrays — un ou plusieurs tableaux à comparer contre.

La fonction retourne un nouveau tableau contenant chaque paire clé/valeur de $array qui n'apparaît pas (avec la même clé) dans l'un des autres tableaux. Les clés sont préservées dans le résultat.

Fonctionnement

array_diff_assoc() parcourt le premier tableau et, pour chaque paire, pose la question : est-ce qu'un autre tableau contient cette même clé avec cette même valeur ? Si oui, la paire est supprimée ; si non, elle est conservée.

Exemple PHP array_diff_assoc()

php— editable, runs on the server

Résultat :

Array
(
    [b] => banana
)

Seul "b" => "banana" survit : $array2 ne possède pas de clé b. Les paires a et c correspondent par clé et par valeur, elles sont donc supprimées. Notez que "d" => "date" dans $array2 est sans incidence — seules les entrées du premier tableau peuvent apparaître dans le résultat.

array_diff_assoc() vs array_diff()

La différence essentielle réside dans le fait que les clés font ou non partie de la comparaison. Avec la même valeur sous des clés différentes, array_diff() les considère comme égales, tandis que array_diff_assoc() ne le fait pas :

<?php

$a = array("a" => "apple", "b" => "banana");
$b = array("x" => "apple");

print_r(array_diff_assoc($a, $b)); // compares key AND value
print_r(array_diff($a, $b));       // compares value only

?>

Résultat :

Array
(
    [a] => apple
    [b] => banana
)
Array
(
    [b] => banana
)

array_diff_assoc() conserve "a" => "apple" car $b stocke apple sous la clé x, pas a. array_diff() le supprime parce que la valeur apple existe quelque part dans $b.

Piège : la comparaison s'effectue comme des strings

En interne, array_diff_assoc() compare les valeurs de façon souple en les convertissant en strings — (string) $elem1 === (string) $elem2. Cela signifie que 10 (int) et "10" (string) sont considérés comme égaux :

<?php

$a = array("x" => 10);
$b = array("x" => "10");

print_r(array_diff_assoc($a, $b));

?>

Résultat :

Array
(
)

Le résultat est vide : 10 et "10" ont la même représentation en string "10". Si vous avez besoin d'une comparaison stricte tenant compte des types, utilisez un callback avec array_udiff_assoc() (ou comparez les types vous-même). Pour comparer uniquement sur les clés, utilisez array_diff_key().

Comparer plus de deux tableaux

Vous pouvez passer autant de tableaux que vous le souhaitez. Une entrée doit être absente de tous pour survivre. Cela fonctionne également avec des clés numériques :

<?php

$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", "red");

print_r(array_diff_assoc($array1, $array2));

?>

Résultat :

Array
(
    [b] => brown
    [c] => blue
    [0] => red
)

"a" => "green" correspond et est supprimée. [0] => "red" survit car dans $array2 la valeur "red" se trouve à la clé 1, pas 0 — la paire clé/valeur est donc différente.

Quand l'utiliser

  • Comparer deux tableaux de configuration ou de paramètres où la clé est importante (par exemple, repérer des options modifiées).
  • Trouver des entrées supprimées d'un instantané « avant » lorsque l'identité de la clé et de la valeur est importante.
  • Toute comparaison où n'utiliser que les valeurs (array_diff()) produirait des faux positifs.

Fonctions associées

Pratique

Pratique
Que fait la fonction array_diff_assoc() en PHP ?
Que fait la fonction array_diff_assoc() en PHP ?
Was this page helpful?