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

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

Susan Sarandon
Lepaskan: 2024-12-25 19:19:10
asal
260 orang telah melayarinya

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

Mengakses Sifat Objek dengan Nama Berangka 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.

Ralat Sintaks dengan Kekunci Angka

Pertimbangkan contoh berikut, apabila objek JSON dinyahkod menggunakan json_decode():

$myVar = json_decode($data);
Salin selepas log masuk

Ini mungkin menghasilkan objek seperti:

[highlighting] => stdClass Object
    (
        [448364] => stdClass Object
            (
                [Data] => Array
                    (
                        [0] => Tax amount liability is .......
                    )
            )
    )
Salin selepas log masuk

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;
Salin selepas log masuk

Apakah Isunya?

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.

Penyelesaian Kemungkinan

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'];
Salin selepas log masuk

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!
Salin selepas log masuk

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'];
Salin selepas log masuk

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'];
Salin selepas log masuk

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!

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