Position actuelle: Accueil> Derniers articles> La fonction de rappel n'est valable que pour les noms de clés, et les erreurs de valeur sont ignorées

La fonction de rappel n'est valable que pour les noms de clés, et les erreurs de valeur sont ignorées

M66 2025-06-06

Le prototype de array_diff_uassoc () est le suivant:

 array array_diff_uassoc ( array $array1 , array $array2 , callable $key_compare_func )
  • $ array1 et $ array2 : deux tableaux à comparer.

  • $ key_compare_func : fonction de rappel personnalisée pour comparer les touches dans les tableaux.

La fonction renvoie un tableau contenant toutes les paires de valeurs de clé dans $ array1 qui n'ont pas de touches correspondantes dans $ array2 . Surtout, la comparaison ici est basée sur le nom de clé et la fonction de comparaison personnalisée .

Comment fonctionne une fonction de rappel?

La définition de la fonction de rappel Key_Compare_Func est la suivante:

 function key_compare_func ($key1, $key2) {
    // La logique des clés de comparaison
}

Dans array_diff_uassoc () , cette fonction de rappel compare uniquement les noms de clés et n'a rien à voir avec la valeur. Le but de cette fonction est de permettre aux développeurs de définir comment comparer les clés dans les tableaux en fonction de leurs propres besoins.

Flux de travail spécifique:

  1. array_diff_uassoc () compare d'abord les noms de clés dans $ array1 et $ array2 .

  2. Si le nom de clé dans $ array1 n'existe pas dans $ array2 , ou si le résultat de la comparaison des noms de clés via la fonction de rappel est inégal, alors la paire de valeurs clés dans $ array1 sera conservée.

  3. Il convient de noter que cette comparaison est entièrement basée sur le nom de clé et que les valeurs ne participent pas à la comparaison.

Pourquoi les valeurs sont-elles ignorées?

Nous devons retourner à la philosophie de conception de PHP pour comprendre ce comportement. L'objectif principal de la fonction array_diff_uassoc () est de calculer les différences dans le tableau en fonction du nom de clé . S'il prend en compte la différence de valeurs clés en même temps, sa fonction chevauche array_diff () ou array_diff_assoc () .

  1. L'objectif de conception est clair : l'intention d'origine de Array_Diff_uassoc () est de fournir une comparaison des différences de noms de clés, pas seulement des différences de valeurs. La fonction de comparaison de valeur a été bien implémentée dans array_diff () et array_diff_assoc () .

  2. Limites des fonctions de rappel : la fonction de rappel KEY_COMPARE_FUNC n'est qu'une comparaison des noms de clés, et non des valeurs. La philosophie de conception de PHP est généralement de permettre à chaque fonction de faire une seule chose afin que le comportement de chaque fonction soit plus clair.

  3. Considérations d'efficacité : si une fonction de rappel compare les clés et les valeurs en même temps, la mise en œuvre de la fonction peut devenir plus complexe et inefficace. PHP permet à chaque fonction de terminer les tâches efficacement et simplement en comparant les clés et les valeurs.

Exemple de code

Supposons que nous ayons le tableau suivant:

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

$array2 = [
    1 => 'apple',
    2 => 'orange',
    4 => 'grape',
];

Si nous utilisons array_diff_uassoc () pour les comparer, la fonction de rappel ne comparera que les noms de clés:

 function compare_keys($key1, $key2) {
    return $key1 - $key2;
}

$result = array_diff_uassoc($array1, $array2, 'compare_keys');

print_r($result);

Résultat de sortie :

 Array
(
    [3] => cherry
)

Dans cet exemple, array_diff_uassoc () compare les noms de clés du Array $ array1 et $ array2 pour trouver les clés qui ne sont pas dans $ array2 . Dans le résultat 3 => Cherry est conservé car la clé 3 n'existe pas dans $ array2 , bien que leurs valeurs soient différentes. Comme prévu, la fonction de rappel n'est valable que pour les noms de clés et les valeurs ne sont pas participés à la comparaison.

Résumer

La raison pour laquelle la fonction de rappel Array_Diff_uassoc () n'est valable que pour les noms de clés et ignore la valeur est principalement parce que l'objectif de conception de la fonction est d'effectuer des calculs différentiels en fonction des noms de clés. Ce comportement aide à simplifier la logique de la fonction, la rendant plus efficace et axée sur son objectif: la différence dans les noms de clés. Si vous devez faire une comparaison différentielle des valeurs de clés, vous pouvez utiliser d'autres fonctions comme array_diff_assoc () , ou traiter la valeur et les noms de clés de la fonction de rappel.