Rumah > pembangunan bahagian belakang > tutorial php > Bagaimana untuk Mengakses Sifat Objek dengan Nama Tidak Sah atau Integer dalam PHP?

Bagaimana untuk Mengakses Sifat Objek dengan Nama Tidak Sah atau Integer dalam PHP?

Patricia Arquette
Lepaskan: 2024-12-21 19:25:21
asal
970 orang telah melayarinya

How to Access Object Properties with Invalid or Integer Names in PHP?

Bagaimanakah saya boleh mengakses sifat objek dengan nama seperti integer atau nama sifat tidak sah?

Penyahkodan JSON dalam PHP selalunya menghasilkan objek dengan sifat yang mempunyai nama yang tidak sah. Ketidakkonsistenan ini menyukarkan untuk mengakses sifat ini menggunakan sintaks objek standard.

Mengakses Sifat dengan Nama Sah

Sifat dengan nama pembolehubah yang sah boleh diakses menggunakan titik tatatanda:

$data = '{ "name": "John Doe" }';
$obj = json_decode($data);
echo $obj->name; // Output: John Doe
Salin selepas log masuk

Mengakses Sifat dengan Nama Tidak Sah

Mengakses sifat dengan integer atau nama tidak sah lain bukanlah semudah itu. PHP mempunyai beberapa ciri yang boleh menyebabkan ralat:

  • PHP 7.2 dan kemudiannya membenarkan mengakses sifat berangka menggunakan sintaks pendakap kerinting:
$data = '{ "42": "The Answer" }';
$obj = json_decode($data);
echo $obj->{'42'}; // Output: The Answer
Salin selepas log masuk
  • Walau bagaimanapun, untuk nama sifat semua angka, sintaks ini masih gagal:
$data = '{ "123": "Three Digits" }';
$obj = json_decode($data);
echo $obj->{'123'}; // Error: syntax error
Salin selepas log masuk
  • Pengecualian kepada peraturan di atas berlaku apabila objek tidak diterbitkan daripada tatasusunan:
$obj = new stdClass;
$obj->{'123'} = 'Three Digits';
echo $obj->{'123'}; // Output: Three Digits
Salin selepas log masuk

Praktikal Penyelesaian

Untuk mengakses hartanah dengan nama yang tidak sah, pertimbangkan ini pilihan:

  • Hantar ke Tatasusunan Secara Manual:
$obj = json_decode($data);
$arr = (array) $obj->highlighting;
$value = $arr['448364']['Data']['0'];
Salin selepas log masuk
  • Pemutus Tatasusunan Rekursif:
function recursive_cast_to_array($obj) {
    $arr = (array) $obj;
    foreach ($arr as &$value) {
        if (is_object($value)) {
            $value = recursive_cast_to_array($value);
        }
    }
    return $arr;
}

$arr = recursive_cast_to_array($obj);
$value = $arr['highlighting']['448364']['Data']['0'];
Salin selepas log masuk
  • Gunakan JSON Fungsi:
$arr = json_decode(json_encode($obj), true);
$value = $arr['highlighting']['448364']['Data']['0'];
Salin selepas log masuk

Perhatikan bahawa fungsi JSON memerlukan pengekodan UTF-8 untuk semua rentetan.

Atas ialah kandungan terperinci Bagaimana untuk Mengakses Sifat Objek dengan Nama Tidak Sah atau Integer dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan