Aktueller Standort: Startseite> Neueste Artikel> Array_Filter () Leistungsanalyse: Rückruf gegen Standardverhalten

Array_Filter () Leistungsanalyse: Rückruf gegen Standardverhalten

M66 2025-05-17

In PHP ist Array_filter () eine sehr häufig verwendete Array -Verarbeitungsfunktion, die hauptsächlich zum Filtern von Elementen in einem Array verwendet wird. Diese Funktion kann eine optionale Rückruffunktion empfangen, die definiert, welche Elemente beibehalten werden sollen. Wenn keine Rückruffunktion bereitgestellt wird, wird Array_filter () die Elemente im Array automatisch mit "falschen Werten" wie Falsch , Null , 0 , leerer Zeichenfolge und leerem Array entfernt.

Die Frage lautet also: In der tatsächlichen Verwendung ist der Leistungsunterschied zwischen der Verwendung von Array_Filter () mit Standardverhalten und der Bereitstellung benutzerdefinierter Rückruffunktionen? Welche Methode ist effizienter?

Dieser Artikel wird aus der Perspektive der Leistung eingehende Analysen durchgeführt, indem die Ausführungszeit dieser beiden Verwendungen verglichen und getestet wird.

1. Überprüfung der grundlegenden Grammatik

 // Standardverhalten:Entfernen Sie das Array“Falscher Wert”
$result = array_filter($array);

// Verwenden Sie Rückruffunktionen:Behalten nur größer als 0 Wert von
$result = array_filter($array, function($value) {
    return $value > 0;
});

2. Beispiele für Testcode

Wir konstruieren ein Array mit einer großen Anzahl von Elementen und filtern sie mithilfe von Standardverhaltens- und benutzerdefinierten Rückruffunktionen.

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

// Konstruieren Sie ein Testarray,Enthalten 100000 Elemente
$testArray = [];
for ($i = 0; $i < 100000; $i++) {
    $testArray[] = $i % 2 === 0 ? 0 : $i; // Die Hälfte ist 0,Die Hälfte ist整数
}

// Einen Test durchführen
$timeDefault = testArrayFilterDefault($testArray);
$timeCallback = testArrayFilterCallback($testArray);

echo "Standardverhalten执行时间:{$timeDefault} Zweite\n";
echo "Rückruffunktion Ausführungszeit:{$timeCallback} Zweite\n";

3. Ergebnisse der Leistungsanalyse

Führen Sie das Skript oben aus und Sie werden feststellen, dass das Standardverhalten in den meisten Fällen schneller ausgeführt wird. Die Gründe sind wie folgt:

  • Das Standardverhalten ist eine integrierte Logik, die von der C-Sprachschicht implementiert wird, und die Ausführungseffizienz ist höher.

  • Bei der Verwendung von Callback-Funktionen erfordert PHP jedes Mal benutzerdefinierte Funktionen, und der Aufrufaufruf von Funktionen kann nicht ignoriert werden, insbesondere wenn große Datenmengen.

Probenausgang (etwas unterschiedlich, abhängig von der spezifischen Maschine):

 Standardverhalten执行时间:0.012345 Zweite
Rückruffunktion Ausführungszeit:0.035678 Zweite

Wie Sie sehen können, ist das Standardverhalten etwa zwei- bis dreimal schneller .

4. Sollte das Standardverhalten immer verwendet werden?

Obwohl das Standardverhalten besser ist, hat es Einschränkungen - nur "falsche Werte" können entfernt werden. Wenn Ihre Filterlogik etwas kompliziert ist, z. B. bei der Beibehaltung eines bestimmten Wertebereichs, Typ -Überprüfungen usw., benötigen Sie noch eine Rückruffunktion.

Zum Beispiel:

 // Machen Sie ungerade Werte
array_filter($array, function($v) {
    return $v % 2 !== 0;
});

Dies kann offensichtlich nicht durch Standardverhalten erreicht werden.

5. Realer Fall: Filtern Sie die von den Benutzern übermittelten Formulardaten

 $userInput = [
    'name' => 'Alice',
    'email' => '',
    'age' => 0,
    'newsletter' => false,
];

$cleanedInput = array_filter($userInput); // 只保留非Falscher Wert字段

// Ausgabe ['name' => 'Alice']

Wenn Sie in diesem Beispiel alle nicht gefüllten Felder (einschließlich falscher , leerer Zeichenfolgen usw.) entfernen möchten, ist das Standardverhalten sehr angemessen. Und wenn Sie nur nicht leere Zeichenfolgenfelder aufbewahren möchten, müssen Sie einen Rückruf verwenden:

 $cleanedInput = array_filter($userInput, function($value) {
    return is_string($value) && trim($value) !== '';
});

6. Zusammenfassung

Wie man benutzt Leistung Flexibilität Szenarien verwenden
Standardverhalten ? Effizient ? Eingeschränkt Falsche Werte entfernen
Verwenden Sie Rückruffunktionen ? Etwas langsam ? Flexibel Benutzerdefinierte Filterlogik

Vorschlag: Wenn Sie nur falsche Werte entfernen, verwenden Sie das Standardverhalten. Wenn komplexere Logik erforderlich ist, ist es unvermeidlich, Rückruffunktionen zu verwenden.