W3docs

Fonction PHP array_diff_ukey() - Guide complet

Découvrez la fonction PHP array_diff_ukey() pour comparer des tableaux et obtenir les différences selon une fonction de comparaison de clés personnalisée.

Fonction PHP array_diff_ukey() - Guide complet

En PHP, la fonction array_diff_ukey() est un outil puissant qui vous permet de comparer des tableaux et de retourner la différence entre eux en utilisant une fonction de comparaison de clés personnalisée. Dans cet article, nous allons examiner de plus près comment cette fonction fonctionne et comment vous pouvez l'utiliser dans vos projets PHP.

Signature et paramètres de la fonction

array_diff_ukey(array $array, array ...$arrays, callable $key_compare_func): array

Il s'agit de la notation du manuel PHP pour cette fonction. Au moment de l'exécution, le dernier argument que vous passez est toujours le callback de comparaison ; chaque argument qui le précède est traité comme un tableau.

Paramètres :

  • $array : Le tableau de base à comparer.
  • $arrays : Un ou plusieurs tableaux à comparer avec le tableau de base.
  • $key_compare_func : Un callable qui compare deux clés et retourne un entier inférieur, égal ou supérieur à zéro (le même contrat qu'un comparateur usort).

Retourne : Un tableau contenant les entrées de $array dont les clés ne sont présentes dans aucun des autres tableaux. Les valeurs ne sont jamais inspectées — uniquement les clés.

Quand l'utiliser ?

La plupart du temps, array_diff_key() suffit : elle supprime les entrées dont les clés apparaissent dans d'autres tableaux en utilisant une comparaison de clés de type ===. Utilisez array_diff_ukey() uniquement lorsque la logique de comparaison « est-ce la même clé ? » est personnalisée — par exemple, pour traiter les clés sans distinction de casse, comparer uniquement le préfixe d'une clé, ou normaliser les chaînes numériques avant la correspondance. Si vous devez comparer des valeurs avec un callback, consultez array_udiff() ; pour comparer à la fois les clés et les valeurs, consultez array_diff_uassoc().

Comment fonctionne la fonction PHP array_diff_ukey() ?

La fonction array_diff_ukey() prend deux tableaux ou plus comme arguments, et compare leurs entrées en utilisant la fonction de comparaison de clés que vous fournissez. La fonction de comparaison de clés doit retourner un entier inférieur, égal ou supérieur à zéro, selon le résultat de la comparaison.

Si le résultat de la comparaison est inférieur à zéro, le premier argument est considéré comme inférieur au second. Si le résultat est supérieur à zéro, le premier argument est considéré comme supérieur au second. Si le résultat est égal à zéro, les deux arguments sont considérés comme égaux.

Utilisation de la fonction PHP array_diff_ukey()

Voici un exemple d'utilisation de la fonction array_diff_ukey() en PHP :

Exemple PHP d'utilisation de la fonction array_diff_ukey

<?php

function key_compare_func($a, $b)
{
    if ($a === $b) {
        return 0;
    }
    return ($a > $b)? 1:-1;
}

$array1 = ["a" => "green", "b" => "brown", "c" => "blue", "red"];
$array2 = ["a" => "green", "yellow", "red"];
$result = array_diff_ukey($array1, $array2, 'key_compare_func');
print_r($result);

?>

Dans cet exemple, la fonction array_diff_ukey() est utilisée pour comparer les entrées de $array1 et $array2 à l'aide d'une fonction de comparaison de clés personnalisée nommée key_compare_func. Le tableau résultant, stocké dans $result, contient les entrées de $array1 qui ne sont pas présentes dans $array2.

Remarque : dans le callback, $a et $b représentent les clés des tableaux, et non les valeurs.

Sortie :

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

Explication détaillée : $array1 possède les clés a, b, c et 0 (le "red" sans clé reçoit la clé entière 0). $array2 possède les clés a, 0 et 1. Les clés a et 0 existent dans les deux tableaux, donc array_diff_ukey() supprime "green" et "red" du résultat, ne conservant que les entrées dont les clés (b, c) sont uniques à $array1.

Fonction de comparaison de clés personnalisée

La fonction de comparaison de clés personnalisée est un élément essentiel de la fonction array_diff_ukey(), car elle détermine la manière dont les entrées des deux tableaux sont comparées. Voici un exemple de fonction de comparaison de clés personnalisée :

Exemple PHP de fonction de comparaison de clés de tableau personnalisée

function key_compare_func($a, $b)
{
    if ($a === $b) {
        return 0;
    }
    return ($a > $b)? 1:-1;
}

Dans cet exemple, la fonction key_compare_func() retourne 0 si les deux arguments sont égaux, 1 si le premier argument est supérieur au second, et -1 si le premier argument est inférieur au second.

Remarque sur la coercition de types : lors de la comparaison de clés de types mixtes (par exemple, des chaînes et des entiers), la comparaison souple de PHP dans votre callback peut produire des résultats inattendus. Assurez-vous que votre callback gère explicitement la conversion de types ou utilise la comparaison stricte (===) si une correspondance précise des types est requise.

Cas pratique : comparer les clés sans distinction de casse

L'exemple ci-dessus se comporte exactement comme la plus simple array_diff_key(). Le callback personnalisé n'est utile que lorsque la comparaison elle-même est non triviale — par exemple, faire correspondre les clés indépendamment de la casse :

php— editable, runs on the server

Même si "Host" et "PORT" diffèrent en casse par rapport à "host" et "port", strcasecmp les traite comme des clés égales, elles sont donc supprimées. Seul Debug, qui n'a pas de correspondant dans $defaults, survit :

Array
(
    [Debug] => 1
)

Un simple array_diff_key() aurait conservé les trois entrées, car "Host" !== "host". C'est précisément cette différence qui fait de array_diff_ukey() le bon outil dans ce cas.

Conclusion

La fonction array_diff_ukey() compare des tableaux par leurs clés à l'aide d'un callback que vous fournissez, et retourne les entrées du premier tableau dont les clés sont absentes des autres. Utilisez-la lorsque l'égalité des clés nécessite une logique personnalisée ; préférez la plus simple array_diff_key() lorsqu'une comparaison stricte des clés suffit.

Fonctions associées à connaître :

Pratique

Pratique
Quelle est l'utilisation correcte de la fonction array_diff_ukey() en PHP ?
Quelle est l'utilisation correcte de la fonction array_diff_ukey() en PHP ?
Was this page helpful?