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