Position actuelle: Accueil> Derniers articles> array_diff_ukey () comment gérer les clés en double

array_diff_ukey () comment gérer les clés en double

M66 2025-05-14

array_diff_ukey () est une fonction très utile en php. Il nous permet de comparer les clés de deux tableaux en fonction des fonctions de comparaison définies par l'utilisateur, puis de renvoyer un tableau qui contient des paires de valeurs clés qui existent dans le premier tableau mais pas dans le deuxième tableau. Bien que cette fonction soit très intuitive, le comportement peut être déroutant dans certains cas, en particulier lorsqu'il s'agit de clés en double dans un tableau.

1. La fonction array_diff_ukey () est essentiellement utilisée

La syntaxe de base de la fonction array_diff_ukey () est la suivante:

 array_diff_ukey(array $array1, array $array2, callable $key_compare_func) : array
  • $ array1 : le premier tableau d'entrée.

  • $ array2 : le deuxième tableau d'entrée.

  • $ key_compare_func : une fonction de rappel définie par l'utilisateur pour comparer deux clés. La fonction accepte deux paramètres et doit renvoyer une valeur entière indiquant la relation entre les deux clés.

2. Gérer le comportement des clés en double

Lorsque vous utilisez array_diff_ukey () pour comparer la différence entre les paires de valeurs de clé, PHP traversera les clés des deux tableaux et jugera si les clés sont égales via la fonction de comparaison fournie par l'utilisateur. Lorsque des clés en double sont présentes, le comportement de PHP n'est peut-être pas exactement ce que nous attendons.

2.1 L'apparition de clés répétées

Lorsque le tableau d'entrée contient des touches en double, array_diff_ukey () compare la valeur de chaque clé avec la clé du deuxième tableau de comparaison. En particulier, s'il y a les mêmes clés dans les deux tableaux, mais que les clés sont dans des positions différentes dans le tableau, PHP se compare sur la dernière occurrence de la clé, ignorant les clés répétées qui apparaissent auparavant.

2.2 array_diff_ukey () ignore les clés en double

Lorsqu'il y a plusieurs clés en double dans le tableau, array_diff_ukey () effectue des comparaisons basées sur la dernière occurrence de la clé. Par exemple, supposons que nous ayons les deux tableaux suivants:

 $array1 = [
    1 => 'apple',
    2 => 'banana',
    2 => 'orange',
    3 => 'pear'
];

$array2 = [
    2 => 'grape',
    4 => 'watermelon'
];

Dans cet exemple, la clé 2 est répétée dans $ array1 . Comparez ces deux tableaux en appelant array_diff_ukey () :

 $result = array_diff_ukey($array1, $array2, function($key1, $key2) {
    return $key1 - $key2;
});

Bien que la clé 2 apparaisse deux fois, array_diff_ukey () la compare à la dernière occurrence de 2 (c'est-à-dire la clé correspondant à l'orange ) et la compare à la clé 2 dans $ array2 . En conséquence, la clé 2 sera considérée comme la même, donc la clé n'apparaîtra pas dans le tableau de résultat.

2.3 Cas spécial: l'utilisation des fonctions de rappel de comparaison des clés

Si la logique de la fonction de comparaison est complexe et implique certaines règles de comparaison, array_diff_ukey () sera toujours comparée sur la base de la dernière occurrence de chaque clé, bien que cette méthode de comparaison ne soit pas ce à quoi nous pensons idéalement. À l'heure actuelle, les programmeurs peuvent envisager de disposer des clés en double pendant le stade de préparation du réseau pour éviter une confusion inutile.

3. Exemple: comment éviter les problèmes causés par les clés en double

Supposons que nous voulons traiter le tableau pour garantir que les clés en double n'affectent pas les résultats de comparaison de Array_Diff_ukey () . Nous pouvons d'abord utiliser la fonction Array_Unique () pour supprimer les touches en double, puis effectuer le calcul de la différence.

 $array1 = [
    1 => 'apple',
    2 => 'banana',
    2 => 'orange',
    3 => 'pear'
];

$array2 = [
    2 => 'grape',
    4 => 'watermelon'
];

// Supprimer les touches en double
$array1 = array_unique($array1, SORT_REGULAR);

$result = array_diff_ukey($array1, $array2, function($key1, $key2) {
    return $key1 - $key2;
});

Dans cet exemple, nous utilisons d'abord Array_Unique () pour supprimer les touches en double dans $ array1 pour nous assurer que la comparaison de la valeur de clé est plus précise.

4. Résumé

Array_Diff_ukey () est une fonction de différence de tableau très puissante dans PHP, mais son comportement peut être déroutant face à des clés répétées. PHP se compare en utilisant la dernière valeur de chaque touche, ce qui signifie que les touches en double sont ignorées. Pour éviter l'impact des clés en double sur les résultats, les développeurs peuvent s'assurer que l'opération de comparaison peut être effectuée comme prévu par la déduplication du tableau avant d'utiliser array_diff_ukey () .