In PHP ist Array_Column eine häufig verwendete Funktion, die den Wert einer Spalte aus einem mehrdimensionalen Array extrahieren kann. Normalerweise funktioniert Array_Column beim Umgang mit reinen Arrays einwandfrei, aber die Verwendung von Array_Column kann auf einige Probleme stoßen, wenn Elemente in einem Array gemischte Typen sind (d. H. Teil ist ein Array, Teil ist ein Objekt).
Die grundlegende Verwendung der Funktion array_column ist wie folgt:
array_column(array $input, mixed $column_key, mixed $index_key = null): array
$ input : Das mehrdimensionale Eingangsarray.
$ column_key : Die Taste der Spalte, die extrahiert werden muss (Schlüsselname des Array- oder Attributnamens des Objekts).
$ INDEX_KEY : Optional, verwendet, um den Schlüsselnamen als Rückgabeergebnis -Array anzugeben.
Zum Beispiel, wenn wir ein einfaches Array haben:
$data = [
['id' => 1, 'name' => 'Alice'],
['id' => 2, 'name' => 'Bob'],
['id' => 3, 'name' => 'Charlie']
];
$names = array_column($data, 'name');
print_r($names);
Das Ausgabeergebnis wird:
Array
(
[0] => Alice
[1] => Bob
[2] => Charlie
)
Das Problem kann auftreten, wenn wir ein gemischtes Array an Array_Column übergeben, d. H. Das Array enthält sowohl Arrays als auch Objekte. Angenommen, wir haben das folgende gemischte Array:
$data = [
['id' => 1, 'name' => 'Alice'],
(object)['id' => 2, 'name' => 'Bob'],
['id' => 3, 'name' => 'Charlie']
];
Wenn wir versuchen, die Spalte der Namen mit Array_Column zu extrahieren, stoßen wir auf Probleme:
$names = array_column($data, 'name');
print_r($names);
Die Ausgabe zu diesem Zeitpunkt könnte sein:
Array
(
[0] => Alice
[1] => Bob
[2] => Charlie
)
Eine wichtige Prämisse von Array_Column ist, dass Elemente in einem Array die gleiche Struktur haben sollten. Wenn die Elemente eines Arrays sowohl ein Array als auch ein Objekt enthalten, findet Array_Column die Zielspalte basierend auf der Struktur des Arrays und den Eigenschaften des Objekts. In PHP werden jedoch Arrays und Objekte unterschiedlich zugegriffen:
Die Zugriffsmethode von Arrays erfolgt über Schlüsselnamen (z. B. $ Array ['Key'] ).
Die Zugriffsmethode von Objekten erfolgt über Eigenschaften (z. B. $ Object-> Eigenschaft ).
Wenn ein Objekt in einem gemischten Array enthalten ist, kann Array_Column die Eigenschaften im Objekt nicht einheitlich finden, was zu einem unvollständigen Rückgaberwert oder einem Fehler führt.
Um dieses Problem zu lösen, können wir gemischte Arrays auf folgende Weise behandeln:
Am einfachsten ist es, alle Elemente in ein Array oder Objekt zu vereinen, anstatt sie zu mischen. Konvertieren Sie beispielsweise alle Objekte in ein Array:
$data = [
['id' => 1, 'name' => 'Alice'],
(object)['id' => 2, 'name' => 'Bob'],
['id' => 3, 'name' => 'Charlie']
];
// Objekte in Array konvertieren
foreach ($data as &$item) {
if (is_object($item)) {
$item = (array)$item;
}
}
$names = array_column($data, 'name');
print_r($names);
Dies wird richtig ausgegeben:
Array
(
[0] => Alice
[1] => Bob
[2] => Charlie
)
Wenn die Struktur nicht einheitlich sein kann, können Sie benutzerdefinierte Funktionen verwenden, um Elemente des Objekttyps zu verarbeiten. Zum Beispiel:
function get_name($item) {
if (is_object($item)) {
return $item->name;
}
return $item['name'];
}
$data = [
['id' => 1, 'name' => 'Alice'],
(object)['id' => 2, 'name' => 'Bob'],
['id' => 3, 'name' => 'Charlie']
];
$names = array_map('get_name', $data);
print_r($names);
Diese Methode stellt sicher, dass das Namensattribut korrekt extrahiert werden kann, unabhängig davon, ob das Element ein Array oder ein Objekt ist.
Array_Column ist ein leistungsstarkes Werkzeug, trifft jedoch auf Probleme, wenn es um gemischte Arrays geht, insbesondere wenn Array -Elemente Kombinationen von Arrays und Objekten sind. Um Fehler zu vermeiden, stellen Sie am besten sicher, dass die Array -Elementtypen bei der Verwendung von Array_Column einheitlich sind, oder um verschiedene Arten von Daten auf andere Weise zu verarbeiten. Mit diesen Methoden können wir die Funktion von Array_Column besser nutzen, um Probleme zu vermeiden, die durch inkonsistente Datenstrukturen verursacht werden.
Hoffe dieser Artikel hilft dir! Wenn Sie weitere Fragen haben, besprechen Sie es bitte weiter!