Position actuelle: Accueil> Derniers articles> Array_Filter () Analyse des performances: Rappel vs comportement par défaut

Array_Filter () Analyse des performances: Rappel vs comportement par défaut

M66 2025-05-17

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.

1. Examen de la grammaire de base

 // 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;
});

2. Exemples de code de test

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&#39;exécution de la fonction de rappel:{$timeCallback} Deuxième\n";

3. Résultats de l'analyse des performances

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&#39;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 .

4. Le comportement par défaut doit-il toujours être utilisé?

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.

5. Cas réel: filtrez les données du formulaire soumises par les utilisateurs

 $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) !== '';
});

6. Résumé

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.