Maison >développement back-end >Problème PHP >Comment déterminer si deux tableaux sont égaux en php

Comment déterminer si deux tableaux sont égaux en php

PHPz
PHPzoriginal
2023-04-19 10:07:092631parcourir

En PHP, il n'est pas très difficile de déterminer si deux tableaux sont égaux, mais il faut faire attention à certains détails. Dans cet article, nous présenterons différentes manières de comparer le contenu de deux tableaux et explorerons certains problèmes et solutions courants.

Méthode 1 : utilisez l'opérateur ==

En PHP, vous pouvez utiliser l'opérateur == pour comparer si deux tableaux sont égaux. Cet opérateur compare toutes les clés et valeurs de deux tableaux et renvoie une valeur booléenne. Renvoie vrai si les clés et valeurs des deux tableaux sont exactement égales, faux sinon. Voici un exemple :

$array1 = array('a' => 1, 'b' => 2, 'c' => 3);
$array2 = array('a' => 1, 'b' => 2, 'c' => 4);

if ($array1 == $array2) {
    echo 'Arrays are equal';
} else {
    echo 'Arrays are not equal';
}

// Output: Arrays are not equal

Dans l'exemple ci-dessus, $array1 et $array2 ont les mêmes clés et valeurs, sauf $key3 => $value3. Ils ne sont donc pas égaux.

Il est à noter que l'ordre de comparaison des opérateurs == n'a pas d'importance. Voici un autre exemple qui montre deux clés dans un ordre différent, mais leurs valeurs sont les mêmes :

$array1 = array('a' => 1, 'b' => 2);
$array2 = array('b' => 2, 'a' => 1);

if ($array1 == $array2) {
    echo 'Arrays are equal';
} else {
    echo 'Arrays are not equal';
}

// Output: Arrays are equal

Méthode 2 : utilisez l'opérateur ===

Une autre façon de comparer deux tableaux consiste à utiliser le symbole de l'opérateur === . La différence entre cela et l'utilisation de l'opérateur == est que l'opérateur === compare si les types de données correspondant aux valeurs clés des deux tableaux sont les mêmes. Voici un exemple :

$array1 = array('a' => 1, 'b' => 2, 'c' => 3);
$array2 = array('a' => '1', 'b' => '2', 'c' => '3');

if ($array1 === $array2) {
    echo 'Arrays are equal';
} else {
    echo 'Arrays are not equal';
}

// Output: Arrays are not equal

Dans cet exemple, toutes les valeurs de $array1 sont de type numérique, tandis que toutes les valeurs de $array2 sont de type chaîne. Ils ne sont donc pas égaux.

Méthode 3 : utilisez la fonction array_diff

Une autre façon de comparer deux tableaux consiste à utiliser la fonction array_diff(). Cette fonction renvoie les éléments du deuxième tableau qui ne sont pas présents dans le premier tableau en tant que nouveau tableau. Si le tableau renvoyé est vide, les deux tableaux sont égaux. Voici un exemple :

$array1 = array('a' => 1, 'b' => 2, 'c' => 3);
$array2 = array('a' => 1, 'b' => 2, 'c' => 3);

if (array_diff($array1, $array2) == array()) {
    echo 'Arrays are equal';
} else {
    echo 'Arrays are not equal';
}

// Output: Arrays are equal

Dans cet exemple, la fonction array_diff() renvoie un tableau vide, donc ils sont égaux.

Méthode 4 : Utilisez la fonction Serialize

La dernière méthode consiste à utiliser la fonction Serialize(). Cette fonction sérialisera une variable dans une chaîne, y compris des tableaux. Par conséquent, vous pouvez déterminer si deux tableaux sont égaux en comparant leurs chaînes après sérialisation :

$array1 = array('a' => 1, 'b' => 2, 'c' => 3);
$array2 = array('a' => 1, 'b' => 2, 'c' => 3);

if (serialize($array1) === serialize($array2)) {
    echo 'Arrays are equal';
} else {
    echo 'Arrays are not equal';
}

// Output: Arrays are equal

Il convient de noter que lors de l'utilisation de cette méthode, si l'ordre des éléments dans les deux tableaux est différent, mais ils Les clés et les valeurs ​sont les mêmes, cette méthode les jugera également comme inégaux.

Problèmes courants et solutions

Parfois, certains problèmes peuvent survenir lors de la comparaison de deux baies. Voici quelques problèmes courants et solutions :

Question 1 : Comment ignorer l'ordre des clés lors de la comparaison de deux tableaux ?

Il existe des cas où l'ordre des clés dans deux tableaux peut être différent, mais leurs valeurs sont les mêmes. À l’heure actuelle, l’utilisation de l’opérateur == pour la comparaison ne peut évidemment pas produire le résultat correct. Pour résoudre ce problème, nous pouvons trier les tableaux avant de les comparer, afin que l'ordre des clés puisse être ignoré.

sort($array1);
sort($array2);

if ($array1 == $array2) {
    echo 'Arrays are equal';
} else {
    echo 'Arrays are not equal';
}

Ou utilisez la fonction ksort() pour trier par clé :

ksort($array1);
ksort($array2);

if ($array1 == $array2) {
    echo 'Arrays are equal';
} else {
    echo 'Arrays are not equal';
}

Question 2 : Comment déterminer que les clés et les valeurs de deux tableaux sont les mêmes, mais que les types de données de leurs clés sont différents ?

Lorsque vous utilisez l'opérateur === pour comparer deux tableaux, si leurs clés et valeurs sont les mêmes mais que leurs types de données sont différents, ils seront jugés inégaux. Par exemple :

$array1 = array('1' => 'a', '2' => 'b');
$array2 = array(1 => 'a', 2 => 'b');

if ($array1 === $array2) {
    echo 'Arrays are equal';
} else {
    echo 'Arrays are not equal';
}

// Output: Arrays are not equal

Afin de garantir que les clés et les valeurs de deux tableaux sont les mêmes, même si leurs types de données sont différents, nous pouvons utiliser la fonction array_map() pour convertir les clés vers le même type de données et puis comparez :

$array1 = array('1' => 'a', '2' => 'b');
$array2 = array(1 => 'a', 2 => 'b');

function convert_key($key) {
    return (int) $key;
}

$array1 = array_combine(array_map('convert_key', array_keys($array1)), $array1);
$array2 = array_combine(array_map('convert_key', array_keys($array2)), $array2);

if ($array1 === $array2) {
    echo 'Arrays are equal';
} else {
    echo 'Arrays are not equal';
}

// Output: Arrays are equal

Dans le code ci-dessus, nous utilisons la fonction array_map() pour convertir les clés des deux tableaux en types entiers afin qu'elles puissent être comparées correctement.

Résumé

En PHP, il existe de nombreuses façons de déterminer si deux tableaux sont égaux, comme en utilisant l'opérateur ==, en utilisant l'opérateur ===, en utilisant la fonction array_diff(), en utilisant la fonction serialize(), etc. . Il convient de noter que lors de l'utilisation de ces méthodes, lorsque vous rencontrez des situations particulières, vous devrez peut-être utiliser certaines techniques pour résoudre le problème, telles que ignorer l'ordre des clés, traiter le type de données des clés, etc.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn