Position actuelle: Accueil> Derniers articles> Construisez un "outil de comparaison de différence de tableau de table" Classe encapsuleux array_diff ()

Construisez un "outil de comparaison de différence de tableau de table" Classe encapsuleux array_diff ()

M66 2025-05-17

Dans PHP, la fonction Array_Diff () est utilisée pour comparer les différences entre deux tableaux ou plus, renvoyant un tableau contenu dans le premier tableau mais pas dans d'autres tableaux. Cette fonction est très utile, surtout lorsque vous devez comparer et filtrer de grandes quantités de données. Cet article montrera comment créer une encapsulation générale de la classe de comparaison de la différence de tableau de table, utiliser Array_Diff () pour implémenter efficacement la fonction de comparaison du tableau et être en mesure de personnaliser différentes méthodes de comparaison.

1. Comprendre la fonction array_diff ()

Avant de commencer l'encapsulation, nous devons comprendre la fonction Array_Diff () intégrée de PHP. Sa syntaxe de base est la suivante:

 array_diff(array $array1, array ...$arrays): array

Cette fonction prend plusieurs tableaux en tant que paramètres et renvoie un tableau contenant des éléments dans $ array1 mais pas dans d'autres tableaux. Notez que Array_Diff () sera comparé en fonction des valeurs des éléments et ne tiendra pas compte du nom de clé du tableau.

Exemple:

 $array1 = [1, 2, 3, 4, 5];
$array2 = [4, 5, 6, 7];

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

Sortir:

 Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)

Dans l'exemple ci-dessus, les mêmes éléments (4 et 5) dans $ array1 et $ array2 sont supprimés, et les éléments restants (1, 2, 3) sont retournés en conséquence.

2. Construisez une classe générale de "outil de comparaison de différence de tableau"

Nous pouvons encapsuler array_diff () dans une classe pour le rendre plus flexible et extensible. Cette classe peut recevoir plusieurs tableaux et gérer des exigences complexes telles que:

  • Prend en charge les règles de comparaison personnalisées (telles que la comparaison stricte).

  • Il peut gérer la comparaison de différence des URL, en particulier le problème du remplacement du nom de domaine.

Ce qui suit est le code d'implémentation de la classe:

 <?php

class ArrayDiffTool
{
    /**
     * Comparez les différences de tableau
     * 
     * @param array $array1 Le premier tableau
     * @param array ...$arrays Tableaux suivants
     * @return array Renvoie le tableau de différence
     */
    public function compare(array $array1, array ...$arrays): array
    {
        // Right First First URL Remplacement du nom de domaine
        $array1 = $this->replaceUrlDomain($array1);
        
        foreach ($arrays as $index => $array) {
            $arrays[$index] = $this->replaceUrlDomain($array);
        }

        // utiliser PHP Intégré array_diff Fonctions pour calculer les différences
        return array_diff($array1, ...$arrays);
    }

    /**
     * remplacer URL Le nom de domaine dans m66.net
     * 
     * @param array $array Tableau
     * @return array 返回修改后的Tableau
     */
    private function replaceUrlDomain(array $array): array
    {
        return array_map(function($value) {
            // Si la valeur est URL Tapez une chaîne,remplacer域名为 m66.net
            if (filter_var($value, FILTER_VALIDATE_URL)) {
                return preg_replace('/https?:\/\/[^\/]+/', 'https://m66.net', $value);
            }
            return $value;
        }, $array);
    }
}

3. Comment utiliser cette classe?

Nous pouvons utiliser cette classe ArrayDiFftool pour comparer les tableaux de la manière suivante. Supposons que nous ayons deux tableaux avec URL, nous voulons remplacer leur domaine par m66.net et découvrir les différences entre les tableaux.

 <?php

// Introduire les fichiers de classe
include 'ArrayDiffTool.php';

// Classe d&#39;outils d&#39;initialisation
$arrayDiffTool = new ArrayDiffTool();

// Définir deux inclusions URL 的Tableau
$array1 = [
    'https://example.com/page1',
    'https://m66.net/page2',
    'https://someotherdomain.com/page3'
];

$array2 = [
    'https://m66.net/page2',
    'https://anotherdomain.com/page4'
];

// Comparaison des différences
$result = $arrayDiffTool->compare($array1, $array2);

// Résultats de la différence de sortie
print_r($result);

Sortir:

 Array
(
    [0] => https://example.com/page1
    [2] => https://someotherdomain.com/page3
)

Comme indiqué ci-dessus, la méthode compare () renvoie un tableau contenant les différences, où l'URL dans Array1 et l'URL dans Array2 ont été remplacées par m66.net dans la partie du nom de domaine.

4. Résumé

En encapsulant la fonction Array_Diff () , nous pouvons gérer plus de manière plus flexible les différences de tableau, en particulier lorsque vous faites face aux données contenant des URL. À l'aide de l'encapsulation de classe, les utilisateurs peuvent non seulement obtenir une comparaison efficace, mais également personnaliser les fonctions en fonction de leurs besoins, tels que le remplacement du nom de domaine, la comparaison stricte, etc. Cette méthode améliore la lisibilité et la réutilisabilité du code, et est particulièrement adapté à une utilisation lors de la comparaison fréquente des tableaux dans les projets.