Position actuelle: Accueil> Derniers articles> Array_diff_key () Relation avec les tableaux imbriqués dans des tableaux associatifs

Array_diff_key () Relation avec les tableaux imbriqués dans des tableaux associatifs

M66 2025-05-15

Dans PHP, array_diff_key () est une fonction pour comparer deux tableaux ou plus. Il compare les clés du tableau, pas la valeur. Cette fonction renvoie un tableau qui est inclus dans le premier tableau mais pas dans d'autres tableaux.

Comprendre le comportement de Array_Diff_Key () est particulièrement important lorsque nous traitons des tableaux imbriqués, en particulier lorsque nous traitons des tableaux associatifs complexes.

1. Concept de base: array_diff_key ()

La syntaxe de base de la fonction array_diff_key () est la suivante:

 array_diff_key(array $array1, array $array2, array ...$arrays): array
  • $ Array1 est le premier tableau à être comparé.

  • $ array2, ... $ Arrays sont d'autres tableaux à comparer avec le premier tableau.

  • La fonction renvoie un nouveau tableau contenant des paires de valeurs clés qui existent dans $ array1 mais n'existent pas dans d'autres tableaux.

2. Processus des tableaux ordinaires

Pour les tableaux non motivés ordinaires, array_diff_key () compare les clés comme prévu. Par exemple:

 $array1 = ['a' => 1, 'b' => 2, 'c' => 3];
$array2 = ['b' => 2, 'd' => 4];

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

La sortie sera:

 Array
(
    [a] => 1
    [c] => 3
)

array_diff_key () renvoie une clé dans $ array1 qui n'est pas incluse dans $ array2 . Notez que la comparaison ici est basée uniquement sur le nom de la clé, et non sur la valeur.

3. Gérer les tableaux imbriqués

Les choses deviennent plus compliquées lorsque nous passons des tableaux imbriqués dans array_diff_key () . Considérez l'exemple suivant des tableaux imbriqués:

 $array1 = [
    'a' => ['name' => 'John', 'age' => 25],
    'b' => ['name' => 'Jane', 'age' => 30],
    'c' => ['name' => 'Tom', 'age' => 22]
];
$array2 = [
    'b' => ['name' => 'Jane', 'age' => 30],
    'd' => ['name' => 'Alex', 'age' => 28]
];

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

La sortie sera:

 Array
(
    [a] => Array
        (
            [name] => John
            [age] => 25
        )
    [c] => Array
        (
            [name] => Tom
            [age] => 22
        )
)

Dans cet exemple, array_diff_key () compare les clés des tableaux externes ( a , b , c ) et vérifie uniquement si la clé existe dans un autre tableau. Lorsque la clé B apparaît dans $ array2 , elle est exclue de $ array1 . Les tableaux imbriqués intérieurs ici (tels que 'a' => ['name' => 'John', 'Age' => 25] ) ne sont pas comparés séparément. Nous pouvons seulement dire que les clés A et C sont réservées.

4. Comparaison entre les tableaux imbriqués et les niveaux profonds

Il convient de noter que Array_Diff_Key () ne compare pas les clés de manière récursive des tableaux imbriqués. Si vous voulez des clés de tableau plus profondes, vous devez utiliser des fonctions récursives ou les gérer manuellement. Voici un exemple de récursivité:

 function array_diff_key_recursive($array1, $array2) {
    $result = array_diff_key($array1, $array2);
    
    foreach ($result as $key => $value) {
        if (is_array($value)) {
            $result[$key] = array_diff_key_recursive($value, $array2);
        }
    }
    
    return $result;
}

$array1 = [
    'a' => ['name' => 'John', 'age' => 25, 'address' => ['city' => 'New York', 'zip' => '10001']],
    'b' => ['name' => 'Jane', 'age' => 30],
    'c' => ['name' => 'Tom', 'age' => 22]
];
$array2 = [
    'b' => ['name' => 'Jane', 'age' => 30]
];

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

La sortie sera:

 Array
(
    [a] => Array
        (
            [name] => John
            [age] => 25
            [address] => Array
                (
                    [city] => New York
                    [zip] => 10001
                )
        )
    [c] => Array
        (
            [name] => Tom
            [age] => 22
        )
)

Dans cette implémentation récursive, nous effectuons également une comparaison récursive array_diff_key () des tableaux imbriqués, garantissant que les clés internes peuvent également être comparées correctement.

5. Résumé

  • array_diff_key () est principalement utilisé pour comparer les clés des tableaux, et non les valeurs des tableaux.

  • Pour les tableaux imbriqués, Array_Diff_Key () ne comparera que les clés externes, et les tableaux intérieurs ne participeront pas en comparaison.

  • Si vous devez comparer récursivement les clés des tableaux imbriqués, vous pouvez le faire par des fonctions récursives personnalisées.

Dans le développement réel, la compréhension du comportement de Array_Diff_Key () et son application dans des tableaux imbriqués sont très importants pour le traitement des structures de données complexes. Il nous aide à traiter les données de manière flexible et fournit une structure de tableau précise pour d'autres opérations.