Saya mendapatkan kesalahan aneh menggunakan json_decode()
. Ini memecahkan kode dengan benar data (saya melihatnya menggunakan print_r
), tetapi ketika saya mencoba mengakses informasi di dalam array saya mendapatkan:
Fatal error: Cannot use object of type stdClass as array in
C:\Users\Dail\software\abs.php on line 108
Saya hanya mencoba melakukan: di $result['context']
mana $result
data dikembalikan olehjson_decode()
Bagaimana saya bisa membaca nilai di dalam array ini?
Jawaban:
Gunakan parameter kedua
json_decode
untuk membuatnya mengembalikan array:sumber
Fungsi
json_decode()
mengembalikan objek secara default.Anda dapat mengakses data seperti ini:
Jika Anda memiliki pengidentifikasi seperti
from-date
(tanda hubung akan menyebabkan kesalahan PHP saat menggunakan metode di atas) Anda harus menulis:Jika Anda menginginkan array, Anda dapat melakukan sesuatu seperti ini:
Atau melemparkan objek ke array:
sumber
Anda harus mengaksesnya menggunakan
->
karena merupakan objek.Ubah kode Anda dari:
Untuk:
sumber
if ($result->context = $var)
Hal ini menyebabkan properti diatur ke var dan mengembalikan true, tidak masalah.==
, dalam keadaan Anda saat ini Anda menetapkan$var
nilai$result->context
dengan menggunakan satu sama dengan=
. Danif statement
akan membacanya seolah-olah kosong atau tidak, dan jika$var
memiliki nilai maka itu berarti tidak kosong dan akan selalu mengembalikan true.Punya masalah yang sama hari ini, diselesaikan seperti ini:
Jika Anda menelepon,
json_decode($somestring)
Anda akan mendapatkan Object dan Anda perlu mengakses like$object->key
, tetapi jika u calljson_decode($somestring, true)
Anda akan mendapatkan kamus dan dapat mengakses like$array['key']
sumber
Gunakan
true
sebagai parameter keduajson_decode
. Ini akan mendekode json ke dalam array asosiatif alih-alihstdObject
instance:Lihat dokumentasi untuk lebih jelasnya.
sumber
Ini bukan array, ini objek tipe stdClass.
Anda dapat mengaksesnya seperti ini:
Info lebih lanjut di sini: Apa itu stdClass di PHP?
sumber
Seperti Manual Php katakan,
Ketika kami menggunakan
json_decode();
, kami mendapatkan objek tipe stdClass sebagai tipe kembali. Argumen, yang harus dilewatkan di dalamprint_r()
harus berupa array atau string. Karenanya, kita tidak dapat melewatkan objek di dalamnyaprint_r()
. Saya menemukan 2 cara untuk mengatasi ini.Keluarkan objek ke array.
Ini bisa dicapai sebagai berikut.
Dengan mengakses kunci Objek
Seperti yang disebutkan sebelumnya, ketika Anda menggunakan
json_decode();
fungsi, ia mengembalikan Objek stdClass. Anda dapat mengakses elemen-elemen objek dengan bantuan->
Operator.Satu, juga dapat menggunakan beberapa kunci untuk mengekstrak sub elemen memetikan jika objek memiliki array bersarang.
Mereka adalah pilihan lain
print_r()
juga, sepertivar_dump();
danvar_export();
PS : Juga, Jika Anda mengatur parameter kedua
json_decode();
untuktrue
, itu akan secara otomatis mengkonversi objek kearray();
Berikut adalah beberapa referensi:
http://php.net/manual/en/function.print-r.php
http: // php.net/manual/en/function.var-dump.php
http://php.net/manual/en/function.var-export.php
sumber
Untuk mendapatkan array sebagai hasil dari string json, Anda harus menetapkan param kedua sebagai boolean true.
Kalau tidak, $ result akan menjadi objek std. tetapi Anda dapat mengakses nilai sebagai objek.
sumber
Anda dapat mengonversi objek stdClass ke array seperti:
stdClsss ke array
sumber
Ketika Anda mencoba mengaksesnya sebagai
$result['context']
, Anda memperlakukannya sebagai array, kesalahan itu memberitahu Anda bahwa Anda benar-benar berurusan dengan suatu objek, maka Anda harus mengaksesnya sebagai$result->context
sumber
Inilah tanda tangan fungsinya:
Ketika param salah, yang merupakan default, itu akan mengembalikan tipe php yang sesuai. Anda mengambil nilai tipe itu menggunakan paradigma object.method.
Ketika param benar, itu akan mengembalikan array asosiatif.
Ini akan mengembalikan NULL pada kesalahan.
Jika Anda ingin mengambil nilai melalui array, setel assoc ke true.
sumber
Terkadang saat bekerja dengan API Anda hanya ingin menyimpan objek sebagai objek. Untuk mengakses objek yang memiliki objek bersarang Anda dapat melakukan hal berikut:
Kami akan menganggap ketika Anda mencetak objek yang mungkin Anda lihat:
Untuk mengakses bagian pertama dari objek:
Dan itu akan menghasilkan "kesuksesan"
Sekarang, mari kunci bagian lain:
Output yang diharapkan adalah "Robert" dengan jeda baris.
Anda juga dapat menetapkan ulang bagian dari objek ke objek lain.
Output yang diharapkan adalah "Robert" dengan jeda baris.
Untuk mengakses kunci "1" selanjutnya prosesnya sama.
Output yang diharapkan adalah "AS"
Semoga ini akan membantu Anda memahami objek dan mengapa kami ingin menjaga objek objek. Anda seharusnya tidak perlu mengonversi objek ke array untuk mengakses propertinya.
sumber
alih-alih menggunakan tanda kurung menggunakan operator objek misalnya array saya berdasarkan objek database dibuat seperti ini di kelas yang disebut DB:
untuk mengakses informasi saya menggunakan kode ini pada skrip controller:
kemudian untuk menampilkan informasi yang saya periksa untuk melihat apakah servicecalls telah diatur dan memiliki hitungan lebih besar dari 0 ingat itu bukan array yang saya rujuk jadi saya mengakses catatan dengan operator objek "->" seperti ini:
sumber
Saya mendapatkan kesalahan ini karena login facebook saya tiba-tiba berhenti bekerja (saya juga telah mengubah host) dan melempar kesalahan ini. Cara mengatasinya sangat mudah
Masalahnya ada di kode ini
Pada dasarnya fungsi isset () mengharapkan array tetapi malah menemukan objek. Solusi sederhana adalah mengkonversi objek PHP ke array menggunakan (array) quantifier. Berikut ini adalah kode tetap.
Perhatikan penggunaan array () quantifier di baris pertama.
sumber
Ubah untuk
sumber