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
Mary-Kate Olsenasal
2024-12-18 08:16:15767semak imbas

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!

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'];

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'];

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!

Kenyataan:
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