Position actuelle: Accueil> Derniers articles> Le comportement de array_diff_key () lorsqu'une clé de tableau n'est pas une chaîne ou un entier

Le comportement de array_diff_key () lorsqu'une clé de tableau n'est pas une chaîne ou un entier

M66 2025-05-15

Dans PHP, la fonction array_diff_key () est utilisée pour calculer les différences de clés entre deux tableaux ou plus. Il renvoie un tableau contenant les différences entre toutes les clés du premier tableau qui existent dans d'autres tableaux. Si les touches dans les deux tableaux sont exactement les mêmes, le résultat est un tableau vide.

 <?php
$array1 = [
    'apple' => 'fruit',
    'carrot' => 'vegetable',
    'pear' => 'fruit'
];

$array2 = [
    'apple' => 'fruit',
    'carrot' => 'vegetable'
];

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

Sortir:

 Array
(
    [pear] => fruit
)

Ce code montre comment calculer la différence entre les clés dans deux tableaux par la fonction array_diff_key () . Dans cet exemple, Pearl n'apparaît que dans $ array1 , il est donc retourné.

La manifestation d'une clé n'est ni une chaîne ni un entier

Explorons plus en détail une situation plus spéciale: comment Array_Diff_key () se comportera-t-il lorsque les clés d'un tableau ne sont-elles ni des chaînes ni des entiers? En PHP, les clés d'un tableau peuvent être des entiers, des chaînes ou d'autres types de valeurs (tels que des objets, etc.). Cependant, PHP convertit certains types de données en types de chaînes ou entiers sous forme de touches de tableau. Par conséquent, la conversion de type peut se produire lorsque les clés d'un tableau ne sont ni des chaînes ni des entiers.

Considérez l'exemple de code suivant:

 <?php
$array1 = [
    new DateTime() => 'time object',
    3.14159 => 'pi',
    true => 'boolean'
];

$array2 = [
    '2025-04-18 10:00:00' => 'time object',
    3 => 'pi',
    '1' => 'boolean'
];

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

Dans cet exemple, $ array1 utilise différents types de clés: objet DateTime , numéro de point flottant et booléen. $ array2 utilise la chaîne '2025-04-18 10:00:00' , Integer 3 et String '1' comme clés. Analysons comment array_diff_key () gérera ces clés.

PHP lors du traitement des clés du tableau, les touches non entières et non corrigées sont dactylographiées. Spécifiquement:

  • L'objet DateTime est converti en représentation de chaîne ( DateTime :: __ ToString () ).

  • Le numéro de point flottant 3.14159 sera converti en chaîne "3.14159" .

  • La valeur vraie booléenne sera convertie en chaîne "1" .

Par conséquent, Array_Diff_Key () peut être comparé aux touches d'origine lors du traitement de ces clés, et les touches converties sur le type sont considérées comme différentes.

en conclusion

array_diff_key () se comparera en fonction des règles de conversion de type clé. Si les clés d'un tableau ne sont ni des chaînes ni des entiers, PHP convertira automatiquement ces clés en chaînes ou entiers et les comparera en fonction de ces valeurs converties. Des résultats non intuitifs peuvent se produire pour certains types de données spéciaux, en particulier les objets ou les booléens. Par conséquent, lorsque vous utilisez array_diff_key () , il est préférable de s'assurer que les clés du tableau sont des chaînes ou des entiers pour éviter les conversions de type inattendues.