Saya mendapatkan kesalahan PHP yang aneh setelah memperbarui versi php saya ke 5.4.0-3.
Saya punya array ini:
Array
(
[host] => 127.0.0.1
[port] => 11211
)
Ketika saya mencoba mengaksesnya seperti ini saya mendapat peringatan aneh
print $memcachedConfig['host'];
print $memcachedConfig['port'];
Warning: Illegal string offset 'host' in ....
Warning: Illegal string offset 'port' in ...
Saya benar-benar tidak ingin hanya mengedit php.ini saya dan mengatur ulang tingkat kesalahan.
$memcachedConfig
bukan array itu. Showvar_dump($memcachedConfig);
var_export($memcachedConfig)
tepat sebelum "cetak".Jawaban:
Silakan coba dengan cara ini .... Saya telah menguji kode ini .... Berhasil ....
sumber
include_once($file);
. Array telah dibangun dengan benar (info debug menunjukkan ini), namun harus disalin secara manual ke array lain sebelum dapat digunakan tanpa pesan peringatan stringoffset ilegal PHP.Kesalahan
Illegal string offset 'whatever' in...
umumnya berarti: Anda mencoba menggunakan string sebagai array penuh.Itu sebenarnya mungkin karena string dapat diperlakukan sebagai array karakter tunggal di php. Jadi Anda berpikir $ var adalah array dengan kunci, tetapi itu hanya string dengan kunci numerik standar, misalnya:
Anda dapat melihat ini dalam aksi di sini: http://ideone.com/fMhmkR
Bagi mereka yang datang ke pertanyaan ini mencoba menerjemahkan ketidakjelasan kesalahan menjadi sesuatu yang harus dilakukan tentang itu, seperti saya.
sumber
fetchAll(PDO::FETCH_ASSOC)
sebagai gantinyafetch(PDO::FETCH_ASSOC)
dan bekerja dengan sempurna.$variablename = [];
dua kali, di bagian lain dari kode saya$variablename = "test";
yang menyebabkan pesan kesalahan.TL; DR
Anda mencoba mengakses
string
seolah-olah array, dengan kunci yang astring
.string
tidak akan mengerti itu. Dalam kode kita dapat melihat masalahnya:Secara mendalam
Mari kita lihat kesalahan itu:
Apa yang dikatakan? Dikatakan kami mencoba menggunakan string
'port'
sebagai offset untuk string. Seperti ini:Apa yang menyebabkan ini?
Untuk beberapa alasan Anda mengharapkan
array
, tetapi Anda memilikistring
. Hanya campuran. Mungkin variabel Anda diubah, mungkin tidak pernah menjadiarray
, itu benar-benar tidak penting.Apa yang bisa dilakukan?
Jika kita tahu kita harus memiliki
array
, kita harus melakukan beberapa debugging dasar untuk menentukan mengapa kita tidak memilikiarray
. Jika kita tidak tahu apakah kita akan memilikiarray
ataustring
, segalanya menjadi sedikit lebih rumit.Apa yang bisa kita lakukan adalah segala macam pemeriksaan untuk memastikan kita tidak memiliki pemberitahuan, peringatan atau kesalahan dengan hal-hal seperti
is_array
danisset
atauarray_key_exists
:Ada beberapa perbedaan halus antara
isset
danarray_key_exists
. Misalnya, jika nilai$array['key']
isnull
,isset
returnfalse
.array_key_exists
hanya akan memeriksa itu, yah, kuncinya ada .sumber
Ada banyak jawaban bagus di sini - tapi saya menemukan masalah saya agak lebih sederhana.
Saya mencoba menjalankan perintah berikut:
dan saya mendapatkan
illegal string
kesalahan ini$x['name']
karena saya belum mendefinisikan array terlebih dahulu. Jadi saya memasukkan baris kode berikut sebelum mencoba untuk menetapkan hal-hal ke$x[]
:dan itu berhasil.
sumber
Agak terlambat untuk pertanyaan, tetapi untuk orang lain yang mencari: Saya mendapatkan kesalahan ini dengan menginisialisasi dengan nilai (tipe) yang salah:
Cara yang benar adalah:
sumber
Mulai dari PHP 5.4 kita perlu memberikan nilai tipe data yang sama dengan yang diharapkan oleh suatu fungsi. Sebagai contoh:
Saat menjalankan fungsi ini, jika nilai string diberikan seperti ini:
Ini akan menghasilkan peringatan offset ilegal karena ketidakcocokan datatype. Untuk mengatasi ini, Anda dapat menggunakan
settype
:sumber
Sebelum memeriksa array, lakukan ini:
sumber
Dalam kasus saya, saya mengubah mysql_fetch_assoc ke mysql_fetch_array dan menyelesaikannya. Butuh 3 hari untuk menyelesaikan :-( dan versi lain dari proyect saya berjalan dengan mengambil assoc.
sumber
Dalam kasus saya, saya menyelesaikannya ketika saya mengubah fungsi yang melakukan kueri sql setelah:
return json_encode($array)
lalu:return $array
sumber
Ini bekerja untuk saya:
Kode Pengujian milik saya:
Keluaran:
55
Periksa teman-teman. Terima kasih
sumber
gunakan saja
sebelum
ini karena Anda tidak pernah mendefinisikan apa yang $ memcachedConfig, jadi secara default diperlakukan oleh string bukan array ..
sumber
Saya memecahkan masalah ini dengan menggunakan fungsi trim (). masalahnya adalah ruang.
jadi mari kita coba
Saya harap ini akan membantu Anda.
sumber
Hanya memetikannya itu membantu siapa pun, saya mendapatkan kesalahan ini karena saya lupa untuk membatalkan serial array. Itu pasti sesuatu yang akan saya periksa jika itu berlaku untuk kasus Anda.
sumber
Itu sudah tua tapi siapa tahu bisa mendapat manfaat dari ini. Anda juga akan mendapatkan kesalahan ini jika array Anda kosong.
Dalam kasus saya, saya memiliki:
yang saya ubah menjadi:
sumber
saya pikir satu-satunya alasan untuk pesan ini adalah karena target Array sebenarnya adalah array seperti string dll (JSON -> {"host": "127.0.0.1"}) variabel
sumber
Untuk PHP
Pastikan untuk memeriksa bahwa nilai yang dikembalikan tidak kosong. Jadi contoh ini untuk PHP, jadi cari tahu cara memeriksa apakah array kosong dalam bahasa lain.
sumber