Rumah > pembangunan bahagian belakang > tutorial php > Bagaimanakah Saya Boleh Mengakses Objek dengan Nama Harta Tidak Sah atau Berangka dalam PHP Menggunakan `json_decode()`?

Bagaimanakah Saya Boleh Mengakses Objek dengan Nama Harta Tidak Sah atau Berangka dalam PHP Menggunakan `json_decode()`?

Mary-Kate Olsen
Lepaskan: 2024-12-18 08:16:15
asal
759 orang telah melayarinya

How Can I Access Objects with Invalid or Numeric Property Names in PHP Using `json_decode()`?

Menggunakan PHP untuk Mengakses Objek dengan Nama Harta Tidak Sah atau Berangka

Apabila cuba menggunakan fungsi json_decode() dalam PHP untuk menghuraikan data JSON , anda mungkin menghadapi kesukaran mengakses sifat dengan nama yang integer atau gagal mematuhi penamaan pembolehubah yang sah konvensyen. Tingkah laku ini berpunca daripada batasan sedia ada PHP dalam mengendalikan objek dengan sifat sedemikian.

Limitation and Quirks

  1. Nama Harta Berangka:
    Percubaan untuk mengakses terus sifat dengan nama angka (tanpa simbol $ sebelumnya) akan mengakibatkan ralat sintaks.
  2. Sintaks Dakap Kerinting:
    Harta dengan nama yang tidak sah boleh diakses menggunakan sintaks pendakap kerinting, tetapi hanya untuk nama yang tidak terdiri sepenuhnya daripada digit.
  3. Asal Objek:
    Objek yang dicipta terus daripada tatasusunan masih boleh mengakses sifat berangka menggunakan sintaks pendakap kerinting, walaupun ia secara teknikalnya tidak sah.

Penyelesaian

Penyelesaian #1: Taip Manual

Hantar objek secara manual ke tatasusunan untuk mengakses sifat yang tidak sah nama:

$a = array('123' => '123', '123foo' => '123foo');
$o = (object) $a;
$a = (array) $o;
echo $a['123']; // OK!
Salin selepas log masuk

Penyelesaian #2: Pilihan Nuklear

Gunakan fungsi rekursif untuk menukar 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'];
Salin selepas log masuk

Penyelesaian #3: Fungsi JSON

Gunakan JSON terbina dalam berfungsi untuk penukaran rekursif kepada tatasusunan:

$arr = json_decode(json_encode($myVar), true);
$value = $arr['highlighting']['448364']['Data']['0'];
Salin selepas log masuk

Adalah penting untuk mempertimbangkan kelemahan setiap penyelesaian sebelum memilih penyelesaian yang paling sesuai dengan keperluan anda. Sebagai contoh, Penyelesaian #2 dan #3 melakukan penukaran tatasusunan yang tidak perlu, manakala Penyelesaian #3 juga memerlukan sifat rentetan dikodkan dalam UTF-8.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses Objek dengan Nama Harta Tidak Sah atau Berangka dalam PHP Menggunakan `json_decode()`?. 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