Position actuelle: Accueil> Derniers articles> La fonction de rappel dans array_diff_uassoc () ne prend pas en charge les erreurs de sous-estimation de la version de fonction anonyme

La fonction de rappel dans array_diff_uassoc () ne prend pas en charge les erreurs de sous-estimation de la version de fonction anonyme

M66 2025-06-06

Dans PHP, la fonction array_diff_uassoc () est utilisée pour comparer deux tableaux ou plus et renvoyer un tableau qui est inclus dans le premier tableau mais pas dans d'autres tableaux. Dans le même temps, array_diff_uassoc () permet d'utiliser une fonction de comparaison personnalisée pour comparer les noms de clés d'un tableau.

Cependant, lorsque nous utilisons les fonctions anonymes comme fonction de rappel pour array_diff_uassoc () Dans les versions inférieures de PHP, nous pouvons rencontrer une erreur. Pour comprendre ce problème, nous devons d'abord comprendre certaines connaissances clés de base.

Utilisation de Array_Diff_uassoc ()

La signature de la fonction de array_diff_uassoc () est la suivante:

 array_diff_uassoc(array $array1, array $array2, callable $key_compare_func) : array

dans:

  • $ array1 est le premier tableau, et $ array2 est l'autre tableau à comparer.

  • $ key_compare_func est une fonction de comparaison personnalisée qui compare les clés aux tableaux.

La racine du problème

Dans les versions inférieures de PHP, les fonctions anonymes (c'est-à-dire les fermetures) ne prennent pas en charge entièrement le passage en tant que rappels à certaines fonctions intégrées, en particulier des fonctions comme array_diff_uassoc () . Nous pouvons voir à travers la documentation de Array_Diff_uassoc () que son troisième paramètre $ key_compare_func devrait être une fonction appelable. Bien que PHP prenne en charge les fonctions anonymes depuis PHP 5.3, dans certaines versions inférieures de PHP, les fonctions anonymes ne sont pas bien prises en charge en tant que fonctions de rappel, ce qui entraîne une erreur.

Exemple de question

Dans les versions antérieures de PHP (telles que PHP 5.3 ou antérieure), le code suivant rapportera une erreur:

 <?php
$array1 = [1 => 'apple', 2 => 'banana', 3 => 'cherry'];
$array2 = [1 => 'apple', 2 => 'orange', 4 => 'grape'];

$result = array_diff_uassoc($array1, $array2, function($a, $b) {
    return $a - $b;
});
?>

Le but de ce code est de comparer les valeurs clés d'un tableau via des fonctions anonymes. Cependant, dans les versions ci-dessous PHP 5.3, ce code rapportera une erreur car PHP ne peut pas analyser correctement les fonctions anonymes et les passer en fonctions de rappel.

Solution

1. Utiliser les fonctions nommées

Pour résoudre ce problème, nous pouvons remplacer la fonction anonyme par une fonction nommée. Les fonctions nommées peuvent être gérées correctement dans toutes les versions de PHP:

 <?php
function compare_keys($a, $b) {
    return $a - $b;
}

$array1 = [1 => 'apple', 2 => 'banana', 3 => 'cherry'];
$array2 = [1 => 'apple', 2 => 'orange', 4 => 'grape'];

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

Cette méthode fonctionne correctement dans toutes les versions de PHP, évitant les problèmes possibles causés par les fonctions anonymes.

2. Améliorer la version PHP

Si possible, il est recommandé de mettre à niveau PHP à 5,3 ou plus. Dans PHP 5.3 et plus, les fonctions anonymes (fermetures) sont mieux prises en charge en tant que fonctions de rappel. Par conséquent, si votre projet utilise une ancienne version PHP, il est recommandé de mettre à niveau la version PHP pour éviter des problèmes de compatibilité similaires.

Résumer

Lorsque vous utilisez array_diff_uassoc () dans PHP, si la fonction de rappel est une fonction anonyme, la version inférieure de PHP rapportera une erreur. La racine du problème est que la prise en charge des fonctions anonymes est limitée, en particulier dans les versions avant PHP 5.3. La solution consiste à utiliser des fonctions nommées au lieu de fonctions anonymes, ou à mettre à niveau la version PHP pour prendre en charge les fonctions anonymes.