Saya memiliki beberapa kunci array php yang diisi dengan banyak karakter aneh.
Apakah ini diperbolehkan? Apakah ada batasan untuk apa yang tidak dapat saya gunakan?
Saya memiliki beberapa kunci array php yang diisi dengan banyak karakter aneh.
Apakah ini diperbolehkan? Apakah ada batasan untuk apa yang tidak dapat saya gunakan?
Jawaban:
Menurut manual :
Kuncinya bisa berupa integer atau string. Nilainya bisa dari jenis apa pun.
Selain itu, pemeran kunci berikut akan terjadi:
- String yang berisi bilangan bulat yang valid akan dimasukkan ke jenis bilangan bulat. Misalnya, kunci "8" sebenarnya akan disimpan di bawah 8. Di sisi lain "08" tidak akan dilemparkan, karena ini bukan bilangan bulat desimal yang valid.
- Float juga dilemparkan menjadi integer, yang berarti bagian pecahan akan dipotong. Misalnya, kunci 8.7 sebenarnya akan disimpan di bawah 8.
- Bools juga diubah menjadi integer, yaitu key true akan disimpan di bawah 1 dan key false di bawah 0.
- Null akan dilemparkan ke string kosong, yaitu kunci null sebenarnya akan disimpan di bawah "".
- Array dan objek tidak dapat digunakan sebagai kunci. Melakukannya akan menghasilkan peringatan: Jenis offset ilegal.
Manual lagi :
String adalah rangkaian karakter, di mana karakter sama dengan byte. Ini berarti bahwa PHP hanya mendukung kumpulan 256 karakter, dan karenanya tidak menawarkan dukungan Unicode asli. Lihat detail tipe string.
Jadi singkatnya, string apa pun bisa menjadi kunci. Dan string dapat berisi data biner apa pun (hingga 2GB). Oleh karena itu, kunci dapat berupa data biner apa pun (karena string dapat berupa data biner apa pun).
Beberapa penyalahgunaan kunci array secara acak (valid):
$w = array(chr(0) => 'null byte?', chr(rand(0, 255)) => 'random byte?');
var_dump($w);
Kuncinya harus berupa string atau integer. Ada beberapa pemeran yang dilakukan, tapi menurut saya manual ini menjelaskan dengan baik:
Kuncinya bisa berupa integer atau string. Nilainya bisa dari jenis apa pun.
Selain itu, pemeran kunci berikut akan terjadi:
- String yang berisi bilangan bulat yang valid akan dimasukkan ke jenis bilangan bulat. Misalnya, kunci "8" sebenarnya akan disimpan di bawah 8. Di sisi lain "08" tidak akan dilemparkan, karena ini bukan bilangan bulat desimal yang valid.
- Float juga dilemparkan menjadi integer, yang berarti bagian pecahan akan dipotong. Misalnya, kunci 8.7 sebenarnya akan disimpan di bawah 8.
- Bools juga diubah menjadi integer, yaitu key true akan disimpan di bawah 1 dan key false di bawah 0.
- Null akan dilemparkan ke string kosong, yaitu kunci null sebenarnya akan disimpan di bawah "".
- Array dan objek tidak dapat digunakan sebagai kunci. Melakukannya akan menghasilkan peringatan: Jenis offset ilegal.
Saya menemukan jawaban ini untuk mencari informasi lebih lanjut tentang masalah yang saya hadapi. Saya menggunakan string dengan karakter UTF-8 di dalamnya, yang tidak akan berfungsi sebagai kunci untuk array yang saya miliki.
Sesuatu seperti
$str = "R&D - Solution";
$arr = array( "R&D - Solution" => "Research" );
echo $arr[$str]; // did not work
Solusi (tidak besar atau pintar) bagi saya adalah melakukan ini ..
$str = md5("R&D - Solution");
$arr = array( md5("R&D - Solution") => "Research" );
echo $arr[$str]; // works!
bin2hex
lebih baik digunakan sebagai kunci karena dijamin unik, tidak seperti md5
dan akan selalu kembali ke aslinya dengan menggunakan hex2bin
. Mungkin lebih cepat dari md5
juga.
Kunci array PHP dapat berupa bilangan bulat atau string. String PHP adalah array byte, yang berarti urutan byte. Tidak ada jenis string lain dan PHP tidak memaksakan batasan khusus pada string kunci array. Dengan kata lain: selama itu string, apapun itu.
Jika kunci kompleks menyebabkan kesalahan "indeks tidak terdefinisi", Anda mungkin hanya mengalami masalah "pangkas".
Saya menjadi gila karena kunci yang kompleks mengeluarkan kesalahan "indeks tidak terdefinisi" dan saya pikir mungkin itu adalah pelanggaran sintaks. Kunci array yang menyebabkan kesalahan dibangun dari kolom dari kueri database MySQL yang saya ubah menjadi kunci dan digunakan dalam array baru. Kuncinya terlihat seperti ini: pl_1DNKoiJKwotCqAycickBVhTy
dan beginilah kode itu dibuat.
//new array created from database query
$new_array[$dbquery['fieldname']] = {some value};
//key value found in field of second array
$keyval = $array_two['fieldname'];
//this produced the "undefined index" error
echo $new_array[$keyval];
padahal, pada kenyataannya, $keyval
dan $dbquery['fieldname']
tampaknya merupakan pasangan yang sempurna (diverifikasi secara visual dengan menggemakan keduanya ke browser). Misteri itu dipecahkan hanya dengan menggunakan trim
pernyataan kedua seperti ini: $keyval = trim($array_two['fieldname']);
Setelah 'dipangkas', php tidak lagi mengeluh.
Berharap ini menyelamatkan beberapa orang lain dari beberapa saat yang membuat frustrasi ...
Saya pribadi tidak punya masalah dengan karakter yang tidak biasa dalam kunci array. Apa yang legal dan tidak legal tidak terdokumentasi dengan baik, selain mengatakan bahwa kuncinya harus skalar. Taruhan terbaik Anda adalah mencobanya dan melihatnya.
Dalam array php Anda tidak dapat menggunakan kunci: 2.3 atau angka desimal
Encode halaman php di ANSI "é" akan dapat digunakan (Cinéma tidak akan muncul sebagai Cinà © ma). Di Notepad ++ cukup gunakan menu Encode => Convert ANSI dan simpan
é
tidak ada, bagaimana jika OP tidak menggunakan Notepad ++ sama sekali?
$a = (object) ['@km³' => 123]; error_log($a->@km³);