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.
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
)
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
)
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";
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.
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 |
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.