Beim Arbeiten mit JSON-Daten in PHP ist es möglich, auf Objekte zu stoßen, deren Eigenschaften als Ganzzahlen oder ungültig benannt sind Variablennamen. Dies kann zu Schwierigkeiten beim Zugriff auf diese Eigenschaften mithilfe der Standardpunktnotation führen.
Betrachten Sie das folgende Beispiel, in dem ein JSON-Objekt mit json_decode() dekodiert wird:
$myVar = json_decode($data);
Dies kann zu einem Objekt wie dem folgenden führen:
[highlighting] => stdClass Object ( [448364] => stdClass Object ( [Data] => Array ( [0] => Tax amount liability is ....... ) ) )
Versuch, auf die Zeichenfolge zuzugreifen Wert im Schlüssel [0] mit Punktnotation, wie unten gezeigt, führt zu einem Syntaxfehler:
print $myVar->highlighting->448364->Data->0;
PHP kann nicht direkt auf Objekteigenschaften mit numerischen Namen zugreifen, weil Sie gelten als ungültige Variablennamen. Dieses Problem entsteht aufgrund der Art und Weise, wie PHP Eigenschaftszugriffsfunktionen analysiert.
Option 1: Manuelles Casting
Um auf die Eigenschaft zuzugreifen, können Sie Folgendes tun: Konvertieren Sie das Objekt manuell mit (array)$object in ein Array. Dadurch können Sie auf die numerische Eigenschaft als Array-Schlüssel zugreifen:
$highlighting = (array)$myVar->highlighting; $data = (array)$highlighting['448364']->Data; $value = $data['0'];
Option 2: Syntax für geschweifte Klammern
Eine alternative Methode besteht darin, die Syntax für geschweifte Klammern zu verwenden Zugang zum Grundstück. Dies funktioniert jedoch nur, wenn der Eigenschaftsname nicht vollständig numerisch ist:
echo $myVar->highlighting->{'448364'}->Data->0; // OK! echo $myVar->highlighting->{'123'}->Data->0; // Error!
Option 3: Rekursive Casting-Funktion
Ein robusterer Ansatz besteht darin, einen benutzerdefinierten Namen zu erstellen Funktion, die Objekte rekursiv in Arrays konvertiert:
function recursive_cast_to_array($o) { $a = (array)$o; foreach ($a as &$value) { if (is_object($value)) { $value = recursive_cast_to_array($value); } } return $a; } $arr = recursive_cast_to_array($myVar); $value = $arr['highlighting']['448364']['Data']['0'];
Option 4: Verwendung von JSON Funktionen
Eine weitere Option besteht darin, die integrierten JSON-Funktionen zu verwenden, um das Objekt rekursiv in ein Array zu konvertieren:
$arr = json_decode(json_encode($myVar), true); $value = $arr['highlighting']['448364']['Data']['0'];
Dieser Ansatz ist praktisch, erfordert jedoch, dass die Daten UTF sind -8 codiert.
Das obige ist der detaillierte Inhalt vonWie greife ich in PHP auf Objekteigenschaften mit numerischen oder ungültigen Namen zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!