In PHP wird die Funktion array_column häufig verwendet, um Daten aus einer Spalte aus einem mehrdimensionalen Array zu extrahieren. In einigen Fällen kann die Verwendung von Array_Column jedoch Leistungsprobleme verursachen, insbesondere wenn häufige Operationen bei großen Arrays erforderlich sind. Der Schlüssel zu diesem Problem ist, dass Array_Column das ursprüngliche Array mehrmals durchquert. Wenn wir die Ergebnisse nicht zwischenspeichern, kann dies zu wiederholten Traverals und unnötigem Leistungsverbrauch führen. In diesem Artikel wird untersucht, wie die wiederholte Durchführung von Arrays bei der Verwendung von Array_Column durch Cache -Richtlinien vermieden wird, wodurch die Leistung verbessert wird.
Betrachten Sie den folgenden Beispielcode:
$array = [
['id' => 1, 'name' => 'Alice', 'age' => 25],
['id' => 2, 'name' => 'Bob', 'age' => 30],
['id' => 3, 'name' => 'Charlie', 'age' => 35]
];
$names = array_column($array, 'name');
In diesem Beispiel wird Array_Column einmal über das $ Array -Array iteriert und die Namensspalte in jedem Subtarray extrahiert. Obwohl diese Operation selbst nicht besonders teuer ist, müssen Sie, wenn Sie mehrmals verschiedene Spalten extrahieren oder in einem großen Array wiederholt Array_Column verwenden müssen, zu unnötigen wiederholten Traversals, die die Leistung beeinträchtigen.
Um wiederholtes Durchlaufen des Arrays zu vermeiden, können wir das Ergebnis des Cache speichern, wenn eine Spalte zum ersten Mal extrahiert wird. Wenn das nächste Mal dieselbe Spalte benötigt wird, wird sie direkt aus dem Cache gelesen, ohne Array_Column aufzurufen.
Der einfachste Weg zum Cache besteht darin, ein Array zu verwenden, um die bereits extrahierten Spalten zu speichern. Zum Beispiel:
// Initialisieren Sie das Cache -Array
$cache = [];
function getColumnFromCache($array, $column, &$cache) {
// Überprüfen Sie, ob sich die Spalte bereits im Cache befindet
if (!isset($cache[$column])) {
// Wenn sich die Spalte nicht im Cache befindet,verwenden array_column Daten abrufen,Und zwischen den Ergebnissen einspeichern
$cache[$column] = array_column($array, $column);
}
return $cache[$column];
}
$array = [
['id' => 1, 'name' => 'Alice', 'age' => 25],
['id' => 2, 'name' => 'Bob', 'age' => 30],
['id' => 3, 'name' => 'Charlie', 'age' => 35]
];
// Holen Sie sich vom Cache 'name' Liste
$names = getColumnFromCache($array, 'name', $cache);
print_r($names);
// 再次Holen Sie sich vom Cache 'name' Liste,Vermeiden Sie wiederholte Traverals
$namesAgain = getColumnFromCache($array, 'name', $cache);
print_r($namesAgain);
In diesem Beispiel prüft die Funktion getColumnfromcache zunächst, ob die Daten für eine bestimmte Spalte im $ cache -Array gespeichert wurden. Wenn die Daten zwischengespeichert wurden, wird das zwischengespeicherte Ergebnis direkt zurückgegeben. Andernfalls wird der Array_Column aufgerufen, um die Spaltendaten zu erhalten und im Cache zu speichern.
Wenn Ihre Anwendung groß ist und dieselben Datenspalten häufig aus mehreren Anforderungen extrahieren muss, sollten Sie effizientere Caching -Schemata wie Redis oder Memcached verwenden.
Beispielsweise kann der Code, der Redis zum Cache -Spaltendaten verwendet, wie folgt sein:
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
function getColumnFromRedis($array, $column, $redis) {
// prüfen Redis 中是否已缓存该Liste
$cachedColumn = $redis->get($column);
if ($cachedColumn === false) {
// Wenn Redis 中没有缓存该Liste,verwenden array_column Daten abrufen
$cachedColumn = json_encode(array_column($array, $column));
// Speichern das Ergebnis in Redis
$redis->set($column, $cachedColumn);
}
return json_decode($cachedColumn, true);
}
// Beispieldaten
$array = [
['id' => 1, 'name' => 'Alice', 'age' => 25],
['id' => 2, 'name' => 'Bob', 'age' => 30],
['id' => 3, 'name' => 'Charlie', 'age' => 35]
];
// Erhalten 'name' Liste
$names = getColumnFromRedis($array, 'name', $redis);
print_r($names);
Diese Art der zwischengespeicherten Spaltendaten durch Redis kann wiederholte Vorgänge bei denselben Daten erheblich reduzieren, insbesondere für häufige Zugriffsszenarien.
Durch die Verwendung einer Caching -Richtlinie können mehrere Durchfahrten derselben Daten bei der Verwendung von Array_Column effektiv vermieden werden, wodurch die Leistung verbessert wird. Für kleine Anwendungen reicht es aus, einen einfachen Speichercache (z. B. Arrays) zu verwenden. Für große Anwendungen können Cache -Systeme wie Redis oder Memcached verwendet werden, um die Leistung und Skalierbarkeit weiter zu verbessern. Die Auswahl des richtigen Caching -Schemas kann die Effizienz des Programms erheblich optimieren, insbesondere bei der Verarbeitung großer Datenmengen.