Aktueller Standort: Startseite> Neueste Artikel> Eine Falle zum Mischen von Arrays (teilweise Arrays, teilweise Objekte) unter Verwendung von Array_Column

Eine Falle zum Mischen von Arrays (teilweise Arrays, teilweise Objekte) unter Verwendung von Array_Column

M66 2025-04-28

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).

1. Grundnutzung der Funktion array_columnfunktion

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
)

2. Probleme in gemischten Arrays

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
)

Die Wurzel des Problems

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.

3. Lösung

Um dieses Problem zu lösen, können wir gemischte Arrays auf folgende Weise behandeln:

3.1 Einheitliche Array -Struktur

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
)
3.2 Objekteigenschaften mit benutzerdefinierten Funktionen extrahieren

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.

4. Zusammenfassung

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!