Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Mengakses Sifat Objek dengan Nama Angka atau Tidak Sah dalam PHP?
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!