Aktueller Standort: Startseite> Neueste Artikel> Ist Array_Filter () effizienter für Foreach?

Ist Array_Filter () effizienter für Foreach?

M66 2025-06-03

In der PHP -Entwicklung müssen wir häufig Elemente herausfiltern, die bestimmte Bedingungen von Arrays erfüllen. Eine der häufigsten Möglichkeiten ist die Verwendung einer Foreach -Schleife mit bedingten Aussagen für die Filterung. Die PHP -Standardbibliothek bietet jedoch auch eine prägnantere Funktion - array_filter () , die für diese Anforderung ausgelegt ist. Dann ist die Frage:

1. Vergleich der Grundnutzung

Angenommen, wir haben eine Reihe von Benutzerlisten und möchten Benutzer älter als 18 Jahre herausfiltern.

Wie man foreach verwendet:

 $users = [
    ['name' => 'Alice', 'age' => 22],
    ['name' => 'Bob', 'age' => 17],
    ['name' => 'Charlie', 'age' => 30],
];

$adults = [];
foreach ($users as $user) {
    if ($user['age'] > 18) {
        $adults[] = $user;
    }
}

So verwenden Sie Array_filter:

 $users = [
    ['name' => 'Alice', 'age' => 22],
    ['name' => 'Bob', 'age' => 17],
    ['name' => 'Charlie', 'age' => 30],
];

$adults = array_filter($users, function($user) {
    return $user['age'] > 18;
});

In Bezug auf die Code -Lesbarkeit ist Array_filter () kompakter und klarer, insbesondere wenn die Logik einfach ist.

2. Leistungsvergleich

Vergleichen wir die Leistungsunterschiede zwischen den beiden mit einer großen Datenmenge über ein einfaches Testskript.

 $users = [];
for ($i = 0; $i < 100000; $i++) {
    $users[] = ['name' => "User$i", 'age' => rand(10, 50)];
}

// verwenden foreach
$start = microtime(true);
$adults1 = [];
foreach ($users as $user) {
    if ($user['age'] > 18) {
        $adults1[] = $user;
    }
}
$time1 = microtime(true) - $start;

// verwenden array_filter
$start = microtime(true);
$adults2 = array_filter($users, function($user) {
    return $user['age'] > 18;
});
$time2 = microtime(true) - $start;

echo "foreach zeitaufwendig: {$time1} Zweite\n";
echo "array_filter zeitaufwendig: {$time2} Zweite\n";

Beispiel für Testergebnisse (kann je nach Gerät variieren):

 foreach zeitaufwendig: 0.025 Zweite
array_filter zeitaufwendig: 0.027 Zweite

Wie zu sehen ist, ist der Leistungsunterschied minimal , und selbst in einigen Fällen ist es etwas schneller, da Array_filter () im Wesentlichen auch Schleifen intern verwendet und auch den Overhead eines Funktionsaufrufs umfasst.

3.. Vorschläge für den Gebrauch

  • Empfohlene Szenarien, in denen Array_filter () verwendet wird:

    • Die Bedingungen sind einfach und der Code ist klarer.

    • Möchten Sie Code in einem funktionalen Stil schreiben.

    • Die Datenverarbeitungskette muss mit anderen Array -Funktionen verwendet werden (z. B. Array_Map () ).

  • Empfohlene Szenarien foreach:

    • Notwendigkeit einer höheren Leistung und endgültigen Optimierung.

    • Die bedingte Logik ist komplex oder erfordert eine Unterbrechung von Schleifen.

    • Zusätzliche Vorgänge sind erforderlich, um das ursprüngliche Array (z. B. Referenzzuordnung usw.) durchzuführen.

4. Zusammenfassung

Während für Foreach in einigen Fällen etwas besser sein kann, bietet Array_filter () eine elegantere Lösung, insbesondere bei der Verfolgung der Code -Lesbarkeit und -wartbarkeit. In Bezug auf die Leistung ist der Unterschied zwischen beiden minimal, und die Wahl sollte eher auf dem tatsächlichen Szenario basieren, als blind "Effizienz" zu verfolgen .

Wenn Sie möchten, dass der Code leichter verstehen und pflegen kann, können Sie auch Array_Filter () versuchen!