In PHP wird die Funktion array_column verwendet, um Daten aus einer angegebenen Spalte aus einem mehrdimensionalen Array zu extrahieren. Typischerweise wird es verwendet, um ein bestimmtes Feld oder Wert jedes untergeordneten Elements in einem Array zu extrahieren. Diese Funktion funktioniert gut, wenn es um einfache Arrays geht, aber wir können auf einige Probleme stoßen, wenn wir versuchen, Objekteigenschaften zu extrahieren. Dieser Artikel wird diese Probleme im Detail und deren Lösungen analysieren.
Die Funktion array_column ist basierend auf Arrays und nicht auf Objekten. Für einfache assoziative Arrays funktioniert Array_Column einwandfrei, für Arrays, die Objekte enthalten, kann jedoch die Eigenschaften des Objekts standardmäßig direkt extrahieren. Dies liegt daran, dass Array_Column ein Schlüssel oder ein Feld des Arrays zum Extrahieren benötigt, aber das Objekt hat keine Schlüsselwertstruktur wie ein Array.
Angenommen, wir haben eine Reihe von Objekten und möchten das Namensattribut jedes Objekts extrahieren:
<?php
class Person {
public $name;
public $age;
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
}
$people = [
new Person('Alice', 30),
new Person('Bob', 25),
new Person('Charlie', 35)
];
$names = array_column($people, 'name'); // Es wird hier scheitern
print_r($names);
?>
Ausgabe:
Warning: array_column() expects parameter 1 to be array, object given in ...
Wie oben gezeigt, meldet Array_Column einen Fehler, in dem ein Array erwartet wird, aber ein Array von Objekten wird übergeben. Dies liegt daran, dass Array_Column keine Extraktion von Objekteigenschaften unterstützt.
Es gibt viele Möglichkeiten, dieses Problem zu lösen. Hier sind zwei gemeinsame Methoden:
Erstens können wir eine Reihe von Objekten in ein assoziatives Array umwandeln. Sie können JSON_DECODE und JSON_ENCODE schnell konvertieren oder die Funktion get_object_vars verwenden, um Objekte in Arrays umzuwandeln.
$peopleArray = array_map(function($person) {
return get_object_vars($person); // Umwandeln Sie Objekte in Arrays
}, $people);
$names = array_column($peopleArray, 'name');
print_r($names);
Ausgabe:
Array
(
[0] => Alice
[1] => Bob
[2] => Charlie
)
Diese Methode wandelt jedes Objekt in ein Array um, und dann können Sie Array_Column verwenden, um die Eigenschaften normal zu extrahieren.
Wenn Sie nicht das gesamte Array von Objekten zuerst in ein assoziatives Array konvertieren möchten, können Sie Array_Map verwenden, um die Eigenschaften jedes Objekts manuell zu extrahieren:
$names = array_map(function($person) {
return $person->name; // Direkter Zugriff auf die Eigenschaften des Objekts
}, $people);
print_r($names);
Ausgabe:
Array
(
[0] => Alice
[1] => Bob
[2] => Charlie
)
Diese Methode manipuliert direkt Objekte und extrahiert Eigenschaften, wodurch der Prozess der Konvertierung in Arrays vermieden wird.
In PHP ist Array_Column eine sehr bequeme Funktion zum Extrahieren bestimmter Spalten aus mehrdimensionalen Arrays. Wenn wir jedoch versuchen, Eigenschaften aus einer Reihe von Objekten zu extrahieren, funktioniert Array_Column nicht direkt, da es nur Array-basierte Operationen unterstützt. Wir können dieses Problem lösen, indem wir Objekte in Arrays konvertieren oder Array_Map mit anonymen Funktionen verwenden.
Ich hoffe, dieser Artikel kann Ihnen helfen, Array_Column besser zu verstehen und zu verwenden und bei der Verarbeitung von Objekten Fehler zu vermeiden.