Aktueller Standort: Startseite> Neueste Artikel> Ist Array_Column effizienter, wenn sie Objekte extrahieren als für Foreach?

Ist Array_Column effizienter, wenn sie Objekte extrahieren als für Foreach?

M66 2025-05-11

In PHP gibt es viele Möglichkeiten, Arrays zu verarbeiten, wobei Array_Column und Foreach -Schleifen zwei gängige Methoden zum Extrahieren spezifischer Werte oder Objekteigenschaften in einem Array sind. Obwohl diese beiden Methoden häufig zur Implementierung ähnlicher Funktionen verwendet werden, unterscheiden sie sich in der Leistung. Ist Array_Column effizienter als für Each ? In diesem Artikel werden wir die Leistungsunterschiede und anwendbaren Szenarien im Detail analysieren.

1. Grundnutzung von Array_Column und Foreach

1.1 Verwenden Sie Array_Column , um Objekteigenschaften zu extrahieren

Die Funktion array_column ist eine sehr nützliche Funktion, die in PHP integriert ist und die Werte einer angegebenen Spalte aus einem mehrdimensionalen Array extrahiert, das zum Extrahieren spezifischer Eigenschaften eines Objekts aus einem Array von Objekten geeignet ist. Angenommen, wir haben das folgende Array von Objekten:

 $objects = [
    (object) ['id' => 1, 'name' => 'Alice'],
    (object) ['id' => 2, 'name' => 'Bob'],
    (object) ['id' => 3, 'name' => 'Charlie']
];

// verwenden array_column Alle extrahieren 'name' Eigentum
$names = array_column($objects, 'name');
print_r($names);

Die Ausgabe wird sein:

 Array
(
    [0] => Alice
    [1] => Bob
    [2] => Charlie
)

Array_Column empfängt zwei Parameter, das erste ist das Array, und der zweite ist der Feldname, der extrahiert werden muss. Die interne Implementierung ist sehr effizient, insbesondere beim Umgang mit großen Arrays, sodass Spaltendaten schneller extrahiert werden können.

1.2 Verwenden Sie für die Schleife, um Objekteigenschaften zu extrahieren

Ein weiterer häufiger Weg besteht darin, mithilfe einer Foreach -Schleife manuell durch das Array zu iterieren und die Eigenschaftswerte jedes Objekts zu extrahieren. Zum Beispiel:

 $objects = [
    (object) ['id' => 1, 'name' => 'Alice'],
    (object) ['id' => 2, 'name' => 'Bob'],
    (object) ['id' => 3, 'name' => 'Charlie']
];

$names = [];
foreach ($objects as $object) {
    $names[] = $object->name;
}
print_r($names);

Das Ausgabeergebnis ist das gleiche wie Array_Column :

 Array
(
    [0] => Alice
    [1] => Bob
    [2] => Charlie
)

Für die für die Foreach -Schleife müssen die Attributwerte jedes Objekts eine manuelle Logik extrahieren. Der Code ist normalerweise länger, hat aber auch eine gute Flexibilität.

2. Leistungsunterschiede

2.1 Leistungsvorteile von Array_Column

Array_Column ist eine interne Funktion, die in PHP implementiert ist und in C geschrieben wurde. Sie ist daher normalerweise effizienter als für den Umgang mit groß angelegten Arrays. Dies liegt daran, dass Array_Column für bestimmte Szenarien optimiert ist. Es extrahiert direkt angegebene Spalten im Array unten und vermeidet die Steuerung und Array -Zuweisungsvorgänge auf der Ebene von PHP -Code.

2.2 Leistungsnachteile von Foreach -Schleifen

Im Gegensatz dazu erfordert eine Foreach -Schleife eine manuelle Durchführung des Arrays und wird nacheinander verarbeitet. Obwohl diese Methode flexibel ist, erfordert jede Schleife mehrere PHP -Operationen wie Array -Operationen, bedingte Beurteilung usw. Daher kann die Foreach -Schleife beim Umgang mit sehr großen Arrays möglicherweise nicht so gut wie Array_Column erfolgen.

3. spezifischer Leistungsvergleich

Angenommen, wir haben ein Array von 10000 Objekten. Wir werden Array_Column verwenden und die Namensattribute des Objekts extrahieren und ihre Ausführungszeit testen.

 // Erstellen Sie einen Container 10000 eine Reihe von Objekten
$objects = [];
for ($i = 0; $i < 10000; $i++) {
    $objects[] = (object) ['id' => $i, 'name' => 'Name ' . $i];
}

// prüfen array_column Leistung
$startTime = microtime(true);
$names = array_column($objects, 'name');
$endTime = microtime(true);
echo "array_column execution time: " . ($endTime - $startTime) . " seconds\n";

// prüfen foreach 循环Leistung
$startTime = microtime(true);
$names = [];
foreach ($objects as $object) {
    $names[] = $object->name;
}
$endTime = microtime(true);
echo "foreach execution time: " . ($endTime - $startTime) . " seconds\n";

In Tests wird Array_Column normalerweise kürzer als für Each ausgeführt, insbesondere wenn das Array größer ist.

4. Schlussfolgerung

In PHP ist die Funktion array_column normalerweise effizienter als die Foreach- Schleife, insbesondere wenn es notwendig ist, bestimmte Spalten aus großflächigen Arrays zu extrahieren. Array_Column verwendet die interne PHP -Optimierung, um Daten schnell mit niedrigerem Overhead zu extrahieren, während Foreach -Schleifen mehr PHP -Operationen erfordern, was zu einer schlechten Leistung führt.

Für Schleifen haben jedoch noch einige Vorteile in einigen Szenarien, in denen eine weitere Anpassungslogik erforderlich ist, insbesondere wenn Sie zusätzliche Vorgänge durchführen müssen, während Sie das Array durchqueren. Wenn Sie in der tatsächlichen Entwicklung einfach eine Spalte in einem Array extrahieren, wird empfohlen, zuerst Array_Column zu verwenden.

Ich hoffe, dieser Artikel kann Ihnen helfen, die Leistungsunterschiede zwischen diesen beiden Methoden besser zu verstehen und angemessenere Entscheidungen zu treffen.