Position actuelle: Accueil> Derniers articles> Que se passe-t-il lorsque la fonction de comparaison renvoie 0, -1 et 1?

Que se passe-t-il lorsque la fonction de comparaison renvoie 0, -1 et 1?

M66 2025-05-15

Dans PHP, la fonction array_diff_uassoc () est utilisée pour comparer les différences entre deux tableaux et peut personnaliser les règles de comparaison des clés. La syntaxe de base de cette fonction est la suivante:

 array_diff_uassoc(array $array1, array $array2, callable $key_compare_func): array
  • $ array1 est le premier tableau.

  • $ array2 est le deuxième tableau et est comparé à $ array1 .

  • $ key_compare_func est une fonction de rappel qui compare deux touches.

La fonction array_diff_uassoc () renvoie un tableau contenant des éléments qui existent dans $ array1 mais n'existent pas dans $ array2 . Sa comparaison est basée sur le nom de la clé (en utilisant une fonction de rappel personnalisée). Mais vous pouvez rencontrer certaines questions: Lorsque la valeur de retour de KEY_COMPARE_FUNC est 0 , -1 ou 1 , quel impact ces différentes valeurs de retour auront-elles sur le résultat de la fonction?

1. Renvoie l'effet de 0

Lorsque la fonction de rappel KEY_COMPARE_FUNC renvoie 0 , cela signifie que les deux touches sont égales. Dans la fonction array_diff_uassoc () , cela signifie que les paires de valeur de clé actuelles de $ array1 et $ array2 n'ont aucune différence dans les noms de clés. Par conséquent, ces paires de valeurs clés ne sont pas considérées comme une partie de la différence et n'apparaissent pas dans le réseau de résultats retourné.

Exemple:

 $array1 = [
    'apple' => 'red',
    'banana' => 'yellow'
];

$array2 = [
    'apple' => 'green',
    'banana' => 'yellow'
];

function compare_keys($key1, $key2) {
    return 0;  // Indique que les deux clés sont les mêmes
}

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

Sortir:

 Array
(
    [apple] => red
)

Explication: Puisque compare_keys () renvoie 0 , cela signifie que les noms de clés Apple et Banana sont égaux, array_diff_uassoc () estime qu'ils n'ont aucune différence, donc le tableau de retour ne contient que la valeur `` rouge '' correspondant à la pomme clé.

2. Renvoyez l'effet de -1

Lorsque key_compare_func renvoie -1 , cela signifie que la clé de $ array1 est plus petite que la clé de $ array2 . Dans ce cas, array_diff_uassoc () pense que la paire de valeurs de clé actuelle dans $ array1 doit être conservée car elle ne trouve pas exactement la même clé dans $ array2 . Par conséquent, ces paires de valeurs clés apparaissent dans le tableau de résultat.

Exemple:

 $array1 = [
    'apple' => 'red',
    'banana' => 'yellow'
];

$array2 = [
    'apple' => 'green',
    'cherry' => 'red'
];

function compare_keys($key1, $key2) {
    return -1;  // exprimer key1 Moins que key2
}

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

Sortir:

 Array
(
    [banana] => yellow
)

Explication: Puisque compare_keys () renvoie -1 , indiquant que la clé Apple est plus petite que la cerise clé, la banane ne trouve pas la paire de clés correspondante dans $ array1 , de sorte que les paires de valeurs de clé correspondant à la banane apparaîtront dans le tableau de résultat.

3. Renvoie l'effet de 1

Lorsque key_compare_func renvoie 1 , cela signifie que la clé de $ array1 est supérieure à la clé de $ array2 . À ce stade, Array_Diff_uassoc () considère la paire de valeurs clés actuelle dans $ array1 comme redondante, il sera donc exclu de la matrice de résultats.

Exemple:

 $array1 = [
    'apple' => 'red',
    'banana' => 'yellow'
];

$array2 = [
    'apple' => 'green',
    'banana' => 'yellow'
];

function compare_keys($key1, $key2) {
    return 1;  // exprimer key1 Supérieur à key2
}

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

Sortir:

 Array
(
    [apple] => red
)

Explication: Dans cet exemple, compare_keys () renvoie 1 , indiquant que la pomme clé est supérieure à la banane clé. Par conséquent, la paire d' Apple à valeur clé ne peut être trouvée dans $ array1 qui est exactement la même paire de clés que $ array2 , et il apparaîtra dans le tableau renvoyé.

Résumer

Lorsque vous utilisez array_diff_uassoc () , les valeurs de retour 0 , -1 et 1 de la fonction de rappel affecteront directement la façon dont les touches sont comparées:

  • Retour 0 : signifie que les clés sont égales et que la paire de valeurs de clé actuelle n'est pas considérée comme une différence.

  • Retour -1 : signifie que la clé de $ array1 est plus petite que la clé de $ array2 , et la paire de valeurs de clé actuelle apparaîtra dans le tableau de résultat.

  • Retour 1 : signifie que la clé de $ array1 est supérieure à la clé de $ array2 , et que la paire de valeurs clés actuelle sera exclue.

En ajustant la logique de comparaison de la fonction de rappel, nous pouvons contrôler de manière flexible les règles de comparaison, réalisant ainsi la comparaison des différences personnalisées.