Position actuelle: Accueil> Derniers articles> Comparaison des performances entre array_diff_ukey () et les boucles foreach

Comparaison des performances entre array_diff_ukey () et les boucles foreach

M66 2025-06-06

Pendant le développement de PHP, le traitement des tableaux est une tâche très courante, et le choix de la bonne fonction ou de la bonne méthode peut non seulement améliorer la lisibilité du code, mais également améliorer considérablement les performances du programme. Cet article utilisera Array_Diff_ukey () et ForEach Loops comme exemples pour comparer leurs différences de performances lors du traitement des tableaux et explorer comment les peser et les utiliser dans le développement réel.

1. Qu'est-ce que Array_Diff_ukey () ?

array_diff_ukey () est une fonction fournie par PHP pour comparer les noms de clés de deux tableaux ou plus, et les comparer via une fonction de rappel définie par l'utilisateur, renvoyant un tableau contenant toutes les touches dans le premier tableau mais pas dans d'autres tableaux.

La syntaxe est la suivante:

 array array_diff_ukey(array $array1, array $array2, callable $key_compare_func)

Exemple:

 function key_compare($a, $b) {
    return strcmp($a, $b);
}

$array1 = ["a" => "apple", "b" => "banana", "c" => "cherry"];
$array2 = ["b" => "blueberry", "d" => "date"];

$result = array_diff_ukey($array1, $array2, "key_compare");
print_r($result);

Sortir:

 Array
(
    [a] => apple
    [c] => cherry
)

2. Utilisez ForEach pour atteindre la même fonction

Nous pouvons également utiliser une boucle foreach pour implémenter une logique similaire:

 $array1 = ["a" => "apple", "b" => "banana", "c" => "cherry"];
$array2 = ["b" => "blueberry", "d" => "date"];
$result = [];

foreach ($array1 as $key => $value) {
    if (!array_key_exists($key, $array2)) {
        $result[$key] = $value;
    }
}

print_r($result);

La sortie est la même:

 Array
(
    [a] => apple
    [c] => cherry
)

3. Comparaison des performances

Jetons maintenant un coup d'œil aux performances des deux lorsqu'ils traitent de grands tableaux.

 function key_compare($a, $b) {
    return strcmp($a, $b);
}

// Construisez de grands tableaux
$array1 = [];
$array2 = [];

for ($i = 0; $i < 10000; $i++) {
    $array1["key$i"] = "value$i";
    if ($i % 2 == 0) {
        $array2["key$i"] = "value_other$i";
    }
}

// test array_diff_ukey()
$start = microtime(true);
$result1 = array_diff_ukey($array1, $array2, "key_compare");
$time1 = microtime(true) - $start;

// test foreach
$start = microtime(true);
$result2 = [];
foreach ($array1 as $key => $value) {
    if (!array_key_exists($key, $array2)) {
        $result2[$key] = $value;
    }
}
$time2 = microtime(true) - $start;

echo "array_diff_ukey(): {$time1} Deuxième\n";
echo "foreach: {$time2} Deuxième\n";

Analyse des résultats

  • array_diff_ukey () peut être légèrement lent en performances car il utilise les fonctions de rappel en interne pour la comparaison des clés, en particulier lorsque la fonction de rappel elle-même est plus compliquée.

  • Forach est généralement mieux performant, surtout lorsque la logique est simple, car elle évite les frais généraux des appels de fonction.

Bien sûr, les performances réelles varieront en fonction des facteurs tels que la taille du tableau, le matériel du serveur, la version PHP, etc. Il est recommandé d'effectuer des mesures réelles dans des scénarios sensibles aux performances.

4. Quand utiliser lequel?

Scène Méthode recommandée raison
Performance-première, logique simple foretter Plus intuitif, pas de fonction des frais d'appel
Code concis, la lisibilité est préférée array_diff_ukey () Les fonctions intégrées expriment l'intention plus clairement
Logique de comparaison complexe personnalisée array_diff_ukey () Prend en charge la logique de comparaison des clés personnalisée

V. Conclusion

Que ce soit en utilisant array_diff_ukey () ou une boucle foreach manuelle, la chose la plus importante est de faire des choix en fonction du scénario commercial spécifique. Si vous développez une API ou un service Web haute performance (comme https://m66.net/api/v1/data ), l'utilisation de boucles Foreach vous donne souvent un meilleur contrôle sur la logique et les performances; Dans une logique commerciale qui se concentre davantage sur la maintenabilité et l'expressivité, le choix des fonctions intégrées fournies par PHP peut être une meilleure façon.

J'espère que cet article pourra vous aider à mieux comprendre les avantages et les inconvénients des deux et prendre des décisions plus raisonnables dans les futurs projets PHP.