array_diff_assoc () est basé sur le mécanisme de comparaison intégré de PHP pour déterminer si deux tableaux sont égaux. Il utilise l'opérateur de comparaison PHP standard ( == ). Cette fonction ne fournit pas de paramètre pour passer dans une fonction de comparaison personnalisée, vous ne pouvez donc pas modifier directement la façon dont il se compare.
Plus précisément, l'implémentation de la fonction array_diff_assoc () n'est pas conçue pour prendre en charge les fonctions de rappel (telles que usort () , array_map () et d'autres fonctions pour prendre en charge les fonctions personnalisées entrantes). Cela nous rend impossible de personnaliser la logique de comparaison personnalisée dans array_diff_assoc () , comme la comparaison des valeurs de tableau par des règles spécifiques ou l'utilisation de règles spécifiques lors de la comparaison des tableaux.
Par défaut, Array_Diff_assoc () fait des comparaisons standard en fonction des clés et des valeurs du tableau. Si deux tableaux ont la même clé mais que leurs valeurs ne sont pas les mêmes, array_diff_assoc () renvoie la partie de différence. Par exemple:
$array1 = [
"a" => "apple",
"b" => "banana",
"c" => "cherry"
];
$array2 = [
"a" => "apple",
"b" => "berry",
"c" => "cherry"
];
$result = array_diff_assoc($array1, $array2);
print_r($result);
Sortir:
Array
(
[b] => banana
)
Dans cet exemple, array_diff_assoc () trouve la différence entre les deux tableaux: la valeur avec la clé "B" est différente dans les deux tableaux, donc il renvoie la différence.
Cependant, si vous souhaitez suivre certaines règles personnalisées (telles que la comparaison des chaînes d'une manière ou d'une autre, ignorer le cas, ignorer certains caractères spécifiques, etc.), array_diff_assoc () ne répondra pas aux besoins.
Bien que Array_Diff_assoc () ne prenne pas en charge les fonctions de comparaison personnalisées, nous pouvons implémenter la logique de comparaison personnalisée via d'autres méthodes. Une solution courante consiste à implémenter manuellement la comparaison de différence via array_filter () et une fonction de comparaison personnalisée.
Voici un exemple de remplacement array_diff_assoc () par une fonction de comparaison personnalisée:
function custom_compare($value1, $value2) {
// Par exemple,Ignorer le cas de comparaison
return strcasecmp($value1, $value2) !== 0;
}
function custom_array_diff_assoc($array1, $array2) {
$result = [];
foreach ($array1 as $key => $value1) {
if (!array_key_exists($key, $array2) || custom_compare($value1, $array2[$key])) {
$result[$key] = $value1;
}
}
return $result;
}
$array1 = [
"a" => "Apple",
"b" => "banana",
"c" => "Cherry"
];
$array2 = [
"a" => "apple",
"b" => "Banana",
"c" => "Cherry"
];
$result = custom_array_diff_assoc($array1, $array2);
print_r($result);
Sortir:
Array
(
[a] => Apple
[b] => banana
)
Dans cet exemple, nous définissons une fonction de comparaison personnalisée appelée Custom_Compare () pour ignorer le cas supérieur et inférieur des chaînes de comparaison. Dans Custom_Array_Diff_assoc () , nous vérifions d'abord si la clé existe dans les deux tableaux. S'il existe, nous pouvons juger si les valeurs sont les mêmes grâce à une fonction de comparaison personnalisée. Si les valeurs sont différentes, la paire de valeurs clés est ajoutée au tableau de résultat.
Cette méthode nous donne plus de flexibilité et être en mesure de personnaliser la logique de comparaison en fonction de nos besoins.
En plus d'implémenter manuellement la logique de comparaison, vous pouvez également utiliser d'autres fonctions intégrées telles que Array_udiff_assoc () , qui vous permet d'utiliser des fonctions de comparaison définies par l'utilisateur pour comparer les différences dans les tableaux. Le principe de la fonction array_udiff_assoc () est similaire à array_diff_assoc () , mais il accepte une fonction de rappel personnalisée pour faire des comparaisons.
Exemple de code:
function custom_compare($value1, $value2) {
return strcasecmp($value1, $value2);
}
$array1 = [
"a" => "Apple",
"b" => "banana",
"c" => "Cherry"
];
$array2 = [
"a" => "apple",
"b" => "Banana",
"c" => "Cherry"
];
$result = array_udiff_assoc($array1, $array2, 'custom_compare');
print_r($result);
Sortir:
Array
(
[a] => Apple
[b] => banana
)
Dans cet exemple, la fonction array_udiff_assoc () utilise Custom_Compare () pour comparer les différences entre deux tableaux, permettant un comportement de comparaison plus flexible.