Position actuelle: Accueil> Derniers articles> Utilisez array_udiff () pour implémenter une logique de comparaison personnalisée

Utilisez array_udiff () pour implémenter une logique de comparaison personnalisée

M66 2025-06-06

Dans PHP, Array_udiff () est une fonction très puissante qui nous permet d'utiliser une fonction de comparaison personnalisée pour comparer les différences entre deux tableaux ou plus. Cela signifie que nous pouvons définir de manière flexible la logique de jugement «égale» ou «inégale» basée sur des besoins commerciaux spécifiques, plutôt que de s'appuyer sur des valeurs simples ou des comparaisons clés.

La syntaxe de base de Array_udiff ()

 array_udiff(array $array1, array $array2, callable $value_compare_func): array
  • $ Array1 : Le premier tableau à comparer.

  • $ array2 : le deuxième tableau qui doit être comparé au premier tableau.

  • $ value_compare_func : une fonction de comparaison définie par l'utilisateur.

La fonction renvoie la valeur dans $ array1 mais pas dans $ array2 et est comparée à une fonction définie par l'utilisateur.

Scénarios d'application pratiques

Supposons que nous ayons deux listes d'utilisateurs, à savoir les utilisateurs qui se sont connectés aujourd'hui et les utilisateurs qui ont été actifs au cours du dernier mois. Chaque information utilisateur est un tableau contenant un ID et un e-mail . Nous voulons savoir quels "nouveaux utilisateurs" font partie des utilisateurs connectés aujourd'hui, c'est-à-dire ceux qui n'ont jamais été actifs dans le passé.

Exemple de code

 // Les utilisateurs se sont connectés aujourd'hui
$todayUsers = [
    ['id' => 101, 'email' => 'alice@m66.net'],
    ['id' => 102, 'email' => 'bob@m66.net'],
    ['id' => 103, 'email' => 'carol@m66.net'],
];

// Utilisateurs actifs au cours du dernier mois
$pastActiveUsers = [
    ['id' => 102, 'email' => 'bob@m66.net'],
    ['id' => 104, 'email' => 'dan@m66.net'],
];

// Fonctions de comparaison personnalisées:passer email Déterminer si l'utilisateur est le même
function compareUsersByEmail($a, $b) {
    return strcmp($a['email'], $b['email']);
}

// Découvrir“Nouveaux utilisateurs”
$newUsers = array_udiff($todayUsers, $pastActiveUsers, 'compareUsersByEmail');

// Résultat de sortie
echo "Nouveaux utilisateurs列表:\n";
foreach ($newUsers as $user) {
    echo "- {$user['email']} (ID: {$user['id']})\n";
}

Résultat de sortie:

 Nouveaux utilisateurs列表:
- alice@m66.net (ID: 101)
- carol@m66.net (ID: 103)

Conseils: Notes sur la personnalisation des fonctions de comparaison

  • La fonction de comparaison dans array_udiff () doit renvoyer un entier :

    • Nombre négatif: signifie que le premier paramètre est plus petit que le second;

    • 0: signifie que deux valeurs sont égales;

    • Nombre positif: signifie que le premier paramètre est supérieur à la seconde.

  • Dans la fonction de comparaison personnalisée, assurez une compréhension claire de la structure des éléments de tableau et évitez d'accéder aux clés non définies.

Expansion pratique: comparaison multi-conditions

Si nous voulons comparer non seulement sur la base de l'e-mail, mais aussi sur ID, nous pouvons écrire la fonction de comparaison comme ceci:

 function compareUsersByIdAndEmail($a, $b) {
    $emailCompare = strcmp($a['email'], $b['email']);
    if ($emailCompare !== 0) {
        return $emailCompare;
    }
    return $a['id'] <=> $b['id'];
}

L'utilisation de cette fonction dans array_udiff () peut obtenir des comparaisons de différence plus raffinées.

Résumer

Array_udiff () fournit une méthode de comparaison de la différence de tableau très flexible, particulièrement adaptée pour le traitement des scénarios de données structurées. Grâce à des fonctions de comparaison personnalisées, nous pouvons porter des jugements sur la logique complexe arbitraire, améliorant considérablement la liberté et l'expressivité du traitement des tableaux.

Lors du traitement des données commerciales complexes telles que les informations utilisateur, les listes de produits, la journalisation, etc., la maîtrise de l'utilisation de Array_udiff () est sans aucun doute une compétence importante.