In der PHP-Entwicklung begegnen Sie häufig auf die Notwendigkeit, bestimmte Schlüsselwerte aus mehrdimensionalen Arrays herauszufiltern. In diesem Artikel wird vorgestellt, wie die beiden Funktionen Array_Diff () und Array_Keys () kombiniert werden, um diese Funktion anmutig und effizient zu erreichen.
Array_keys ()
Gibt alle Schlüsselnamen im Array zurück und unterstützt die angegebene Schlüsselwertfilterung.
Array_diff ()
Berechnet die Differenz zwischen zwei (oder mehr) Arrays, die Werte im ersten Array zurückgeben, nicht jedoch in anderen Arrays.
Durch die Kombination dieser beiden Funktionen können wir zuerst alle Schlüsselnamen des Arrays erhalten, dann unnötige Schlüssel durch die Differenz beseitigen und schließlich das gefilterte Array regenerieren.
Angenommen, es gibt ein mehrdimensionales Array mit der folgenden Struktur:
$data = [
[
'id' => 1,
'name' => 'Alice',
'age' => 25,
'city' => 'Beijing',
],
[
'id' => 2,
'name' => 'Bob',
'age' => 30,
'city' => 'Shanghai',
],
];
Wir wollen das Alter und die Stadtfelder in jedem Subtarray herausfiltern und nur die ID und den Namen hinterlassen.
<?php
$data = [
[
'id' => 1,
'name' => 'Alice',
'age' => 25,
'city' => 'Beijing',
],
[
'id' => 2,
'name' => 'Bob',
'age' => 30,
'city' => 'Shanghai',
],
];
// Schlüsselnamen, die herausgefiltert werden müssen
$keysToRemove = ['age', 'city'];
$result = [];
foreach ($data as $item) {
// Holen Sie sich alle Schlüssel des aktuellen Arrays
$keys = array_keys($item);
// Berechnen Sie die zu erhaltenen Schlüssel,Im Augenblick $keys Und $keysToRemove Der Unterschied festgelegt
$filteredKeys = array_diff($keys, $keysToRemove);
// Rekonstruieren Unterbarrys mit reservierten Schlüssel
$filteredItem = [];
foreach ($filteredKeys as $key) {
$filteredItem[$key] = $item[$key];
}
$result[] = $filteredItem;
}
print_r($result);
Holen Sie sich alle Schlüsselnamen des aktuellen Subtarrays über Array_keys ($ item) .
Verwenden Sie Array_Diff (), um den Schlüssel zu berechnen, den Sie aufbewahren möchten, dh den ursprünglichen Schlüsselsatz abzüglich der zu löschenden Schlüsselsets.
Über die gefilterten Schlüsselnamen iterieren und das Neue Array wieder zusammenbauen.
Schließlich ist $ Ergebnis das gefilterte mehrdimensionale Array.
Array
(
[0] => Array
(
[id] => 1
[name] => Alice
)
[1] => Array
(
[id] => 2
[name] => Bob
)
)
Durch die Kombination von Array_Diff () und Array_Keys () können wir angegebene Schlüsselwerte schnell und flexibel aus mehrdimensionalen Arrays herausfiltern. Diese Methode ist sehr vielseitig und für den Umgang mit verschiedenen komplexen Array -Strukturen geeignet. Wenn mehr Schlüssel zum Filter sind oder die Array -Ebene tiefer ist, kann es auch in Funktionen für die rekursive Verarbeitung eingekapselt werden.
Wenn die URL -Verarbeitung an tatsächlichen Projekten beteiligt ist, können Sie außerdem ähnliche Techniken verwenden, um URL -Felder im Array flexibel zu filtern, und dann die String -Funktionen zum Ersetzen des Domänennamens, z .