Position actuelle: Accueil> Derniers articles> Pourquoi ne reçoit-je pas le résultat attendu lorsque j'utilise array_diff_assoc ()? Quelque chose ne va pas?

Pourquoi ne reçoit-je pas le résultat attendu lorsque j'utilise array_diff_assoc ()? Quelque chose ne va pas?

M66 2025-05-17

Dans PHP, array_diff_assoc () est une fonction très utile qui compare deux tableaux, renvoie tous les éléments du premier tableau qui ne sont pas dans le deuxième tableau, en préservant la cohérence entre le nom de clé et la valeur clé. Cependant, vous pouvez parfois constater que le résultat n'est pas ce que vous attendez lorsque vous utilisez array_diff_assoc () . Cet article expliquera les causes courantes de ce problème et vous aidera à diagnostiquer et résoudre le problème.

Utilisation de base de Array_Diff_assoc ()

La fonction de Array_Diff_assoc () est de comparer les clés et les valeurs de deux tableaux et d'éléments de retour dans le premier tableau différent du deuxième tableau. Son prototype de fonction est le suivant:

 array_diff_assoc(array $array1, array $array2): array

Cette fonction comparera $ array1 et $ array2 , et si la clé et la valeur des éléments dans $ array1 sont différentes de $ array2 , ces éléments seront retournés.

Exemple de code:

 $array1 = [
    "a" => "apple",
    "b" => "banana",
    "c" => "cherry"
];

$array2 = [
    "a" => "apple",
    "b" => "berry",
    "d" => "date"
];

$result = array_diff_assoc($array1, $array2);
print_r($result);

Résultat de sortie:

 Array
(
    [b] => banana
    [c] => cherry
)

Dans cet exemple, array_diff_assoc () renvoie les éléments dans $ array1 , avec les clés B et C , et les valeurs sont différentes de celles de $ array2 .

Questions fréquemment posées

  1. Différentes clés et valeurs du tableau entraînent le résultat de ne pas répondre aux attentes
    array_diff_assoc () compare non seulement les valeurs d'un tableau, mais il compare également les clés. Si les clés des deux tableaux sont exactement les mêmes mais que les valeurs sont différentes, ces éléments seront toujours considérés comme différents. Donc, si vous ne vous souciez que de la différence de valeurs, vous devrez peut-être utiliser la fonction Array_Diff () , qui compare uniquement les valeurs et ne se soucie pas des clés.

    Par exemple:

     $array1 = ["a" => "apple", "b" => "banana"];
    $array2 = ["a" => "apple", "b" => "berry"];
    
    $result = array_diff_assoc($array1, $array2);
    print_r($result);
    

    Résultat de sortie:

     Array
    (
        [b] => banana
    )
    

    Vous pouvez voir que bien que la valeur de B soit différente, elle est traitée comme un élément différent en raison du même nom de clé.

  2. Le tableau contient des tableaux ou des objets imbriqués <br> Si vous utilisez array_diff_assoc () , le tableau contient des tableaux ou des objets imbriqués, la fonction effectuera des comparaisons récursives. Si ces éléments imbriqués ne sont pas traités correctement ou ne sont pas comparés comme prévu, vous pouvez rencontrer des résultats inattendus. Dans ce cas, il est très important de déboguer la structure des tableaux ou des objets imbriqués.

  3. Différents types d'éléments
    Le PHP est un langage dûre vaguement, donc les éléments dans un tableau peuvent être de différents types. array_diff_assoc () compare les valeurs et les types, pas seulement les valeurs. Si les éléments de la même position dans deux tableaux sont différents, la fonction les considérera différentes même si leurs valeurs se ressemblent.

    Par exemple:

     $array1 = [1 => "10", 2 => "20"];
    $array2 = [1 => 10, 2 => 20];
    
    $result = array_diff_assoc($array1, $array2);
    print_r($result);
    

    Résultat de sortie:

     Array
    (
        [1] => 10
        [2] => 20
    )
    

    "10" et 10 sont différents ici, l'un est une chaîne et l'autre est un entier, donc array_diff_assoc () pense qu'ils ne sont pas les mêmes.

  4. L'ordre des éléments dans un tableau <br> Bien que Array_Diff_assoc () compare non seulement les valeurs mais inclut également les noms de clés, il prend en compte l'ordre du tableau. Si vous passez deux tableaux à array_diff_assoc () , bien que leur contenu soit le même, mais dans un ordre différent, ils seront toujours considérés comme différents tableaux.

     $array1 = [1 => "apple", 2 => "banana"];
    $array2 = [2 => "banana", 1 => "apple"];
    
    $result = array_diff_assoc($array1, $array2);
    print_r($result);
    

    Résultat de sortie:

     Array
    (
        [1] => apple
        [2] => banana
    )
    

    En raison de l'ordre différent des tableaux, le résultat renvoie tous les éléments de la table .

  5. Les clés du tableau ne commencent pas à partir de 0 <br> Dans certains cas, les clés du tableau peuvent ne pas commencer à 0, ce qui affectera également le résultat de Array_Diff_assoc () . Assurez-vous de comprendre quelles sont les clés du tableau et si vous utilisez intentionnellement des clés discontinues.

Solution

  • Si vous ne vous souciez pas des clés du tableau, ou si vous avez juste besoin de comparer les valeurs sans considérer les différences de clés, il est recommandé d'utiliser array_diff () .

  • Assurez-vous que les valeurs et les types de clés du tableau sont cohérents et évitez la décalage de type.

  • S'il y a des tableaux ou des objets imbriqués dans le tableau, vérifiez s'ils sont comparés comme prévu ou déboguez de manière récursive.

résumé

array_diff_assoc () est une fonction puissante, mais sa logique de comparaison est basée sur une correspondance stricte des clés et des valeurs. Donc, si vous n'obtenez pas les résultats attendus lorsque vous l'utilisez, cela est généralement dû aux différences de clés, de valeurs ou d'ordre du tableau. Comprendre le fonctionnement de cette fonction et garantir que les clés et les valeurs du tableau sont conformes aux attentes peuvent éviter les problèmes les plus courants.