Dans PHP, Array_Filter () est une fonction de traitement de tableau très couramment utilisée, principalement utilisée pour filtrer les éléments dans un tableau. Cette fonction peut recevoir une fonction de rappel facultative qui définit les éléments qui doivent être conservés. Si aucune fonction de rappel n'est fournie, Array_Filter () supprimera automatiquement les éléments du tableau avec "False Values" tels que false , null , 0 , chaîne vide et tableau vide.
La question est donc: en usage réel, quelle est la différence de performances entre l'utilisation de Array_Filter () avec un comportement par défaut et la fourniture de fonctions de rappel personnalisées? Quelle méthode est la plus efficace?
Cet article effectuera une analyse approfondie du point de vue des performances en comparant et en testant le temps d'exécution de ces deux usages.
// Comportement par défaut:Retirer le tableau“Fausse valeur”
$result = array_filter($array);
// Utiliser les fonctions de rappel:Conserver seulement plus que 0 Valeur
$result = array_filter($array, function($value) {
return $value > 0;
});
Nous construisons un tableau avec un grand nombre d'éléments et les filtrons en utilisant respectivement le comportement par défaut et les fonctions de rappel personnalisées.
function testArrayFilterDefault($array) {
$start = microtime(true);
$result = array_filter($array);
return microtime(true) - $start;
}
function testArrayFilterCallback($array) {
$start = microtime(true);
$result = array_filter($array, function($value) {
return $value > 0;
});
return microtime(true) - $start;
}
// Construire un tableau de test,Inclure 100000 Éléments
$testArray = [];
for ($i = 0; $i < 100000; $i++) {
$testArray[] = $i % 2 === 0 ? 0 : $i; // La moitié est 0,La moitié est整数
}
// Effectuer un test
$timeDefault = testArrayFilterDefault($testArray);
$timeCallback = testArrayFilterCallback($testArray);
echo "Comportement par défaut执行时间:{$timeDefault} Deuxième\n";
echo "Temps d'exécution de la fonction de rappel:{$timeCallback} Deuxième\n";
Exécutez le script ci-dessus et vous constaterez que le comportement par défaut s'exécute plus rapidement dans la plupart des cas. Les raisons sont les suivantes:
Le comportement par défaut est la logique intégrée implémentée par la couche de langue C, et l'efficacité d'exécution est plus élevée.
Lorsque vous utilisez des fonctions de rappel, PHP nécessite d'appeler des fonctions définies par l'utilisateur à chaque fois, et les frais généraux de la fonction ne peuvent pas être ignorés, en particulier lorsque de grandes quantités de données.
Exemple de sortie (légèrement différente selon la machine spécifique):
Comportement par défaut执行时间:0.012345 Deuxième
Temps d'exécution de la fonction de rappel:0.035678 Deuxième
Comme vous pouvez le voir, le comportement par défaut est d'environ deux à trois fois plus rapidement .
Bien que le comportement par défaut soit meilleur, il a des limites - seules les "fausses valeurs" peuvent être supprimées. Si votre logique de filtrage est un peu compliquée, comme conserver une plage spécifique de valeurs, des vérifications de type, etc., vous avez toujours besoin d'une fonction de rappel.
Par exemple:
// Gardez les valeurs impaises
array_filter($array, function($v) {
return $v % 2 !== 0;
});
Cela ne peut évidemment pas être réalisé grâce à un comportement par défaut.
$userInput = [
'name' => 'Alice',
'email' => '',
'age' => 0,
'newsletter' => false,
];
$cleanedInput = array_filter($userInput); // 只保留非Fausse valeur字段
// Sortir ['name' => 'Alice']
Dans cet exemple, si vous souhaitez supprimer tous les champs non remplis (y compris les chaînes fausses et vides, etc.), le comportement par défaut est très approprié. Et si vous souhaitez ne préserver que des champs de chaîne non vides, vous devez utiliser un rappel:
$cleanedInput = array_filter($userInput, function($value) {
return is_string($value) && trim($value) !== '';
});
Comment utiliser | performance | flexibilité | Utiliser des scénarios |
---|---|---|---|
Comportement par défaut | ? Efficace | ? Limité | Supprimer les fausses valeurs |
Utiliser les fonctions de rappel | ? Légèrement lent | ? Flexible | Logique de filtrage personnalisée |
Suggestion: si vous supprimez simplement les fausses valeurs, utilisez le comportement par défaut; Si une logique plus complexe est requise, il est inévitable d'utiliser des fonctions de rappel.