Apabila bekerja dengan data JSON dalam PHP, ada kemungkinan untuk menemui objek dengan sifat dinamakan sebagai integer atau tidak sah nama berubah-ubah. Ini boleh menyebabkan kesukaran mengakses sifat ini menggunakan notasi titik standard.
Pertimbangkan contoh berikut, apabila objek JSON dinyahkod menggunakan json_decode():
$myVar = json_decode($data);
Ini mungkin menghasilkan objek seperti:
[highlighting] => stdClass Object ( [448364] => stdClass Object ( [Data] => Array ( [0] => Tax amount liability is ....... ) ) )
Percubaan untuk mengakses nilai rentetan dalam kekunci [0] menggunakan tatatanda titik, seperti yang ditunjukkan di bawah, akan mengakibatkan ralat sintaks:
print $myVar->highlighting->448364->Data->0;
PHP tidak boleh mengakses terus sifat objek dengan nama angka kerana ia dianggap sebagai nama pembolehubah tidak sah. Isu ini timbul disebabkan oleh cara PHP menghuraikan pengakses harta benda.
Pilihan 1: Penghantaran Manual
Untuk mengakses harta itu, anda boleh menukar objek secara manual kepada tatasusunan menggunakan (tatasusunan)$objek. Ini membolehkan anda mengakses sifat berangka sebagai kunci tatasusunan:
$highlighting = (array)$myVar->highlighting; $data = (array)$highlighting['448364']->Data; $value = $data['0'];
Pilihan 2: Sintaks Dakap Kerinting
Kaedah alternatif ialah menggunakan sintaks pendakap kerinting untuk mengakses harta itu. Walau bagaimanapun, ini hanya berfungsi jika nama sifat bukan angka sepenuhnya:
echo $myVar->highlighting->{'448364'}->Data->0; // OK! echo $myVar->highlighting->{'123'}->Data->0; // Error!
Pilihan 3: Fungsi Casting Rekursif
Pendekatan yang lebih mantap ialah mencipta adat fungsi yang secara rekursif menukarkan objek kepada tatasusunan:
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'];
Pilihan 4: Menggunakan Fungsi JSON
Pilihan lain ialah menggunakan fungsi JSON terbina dalam untuk menukar objek secara rekursif kepada tatasusunan:
$arr = json_decode(json_encode($myVar), true); $value = $arr['highlighting']['448364']['Data']['0'];
Pendekatan ini mudah tetapi memerlukan data untuk UTF-8 dikodkan.
Atas ialah kandungan terperinci Bagaimana untuk Mengakses Sifat Objek dengan Nama Angka atau Tidak Sah dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!