Apakah mungkin menggunakan string numerik seperti "123"
sebagai kunci dalam array PHP, tanpa diubah menjadi integer?
$blah = array('123' => 1);
var_dump($blah);
cetakan
array(1) {
[123]=>
int(1)
}
saya ingin
array(1) {
["123"]=>
int(1)
}
"123"
==123
untuk hampir semua tujuan. Apa alasan Anda menginginkannya secara khusus sebagai string (dan memiliki int itu buruk)?array_merge
"Jika array input memiliki kunci string yang sama, maka nilai kunci itu akan menimpa yang sebelumnya. Namun, jika array berisi kunci numerik , nilai yang kemudian tidak akan menimpa nilai asli, tetapi akan ditambahkan. "asort
Jawaban:
Tidak; tidak, bukan:
Dari manual :
Tambahan
Karena komentar di bawah ini, saya pikir akan menyenangkan untuk menunjukkan bahwa perilakunya mirip tetapi tidak identik dengan kunci objek JavaScript.
sumber
Ya, dimungkinkan dengan melakukan array-casting pada
stdClass
objek:Itu memberi Anda (hingga PHP versi 7.1):
(Pembaruan: Jawaban asli saya menunjukkan cara yang lebih rumit dengan menggunakan
json_decode()
danjson_encode()
mana yang tidak perlu.)Perhatikan komentarnya : Sayangnya tidak mungkin untuk mereferensikan nilai secara langsung:
$data['12']
akan menghasilkan pemberitahuan.Pembaruan :
Dari PHP 7.2 di atasnya juga dimungkinkan untuk menggunakan string numerik sebagai kunci untuk merujuk nilai:
sumber
echo $data['12'];
. Ini akan memberikan kesalahan, "Pemberitahuan: Offset yang tidak ditentukan: 12 in - on line 5".array_key_exists
tidak akan menemukannya di versi lama juga.Jika Anda perlu menggunakan kunci numerik dalam struktur data php, sebuah objek akan berfungsi. Dan objek menjaga keteraturan, sehingga Anda dapat mengulang.
sumber
array()
, jadi saya berasumsi bahwa dalam konteks itu, string yang menentukan bilangan bulat valid akan dimasukkan ke jenis bilangan bulat. Tapi ternyata ada cara lain untuk membuat larik, di mana itu tidak terjadi, seperti dalam jawaban David, yang telah saya uji.Solusi saya adalah:
Ruang char (prepend) adalah solusi yang baik karena pertahankan konversi int:
Anda akan melihat 55 sebagai int.
sumber
"0$id" => $value
. Mempersiapkan0
pekerjaan juga.Anda dapat mengetikkan kunci ke string tetapi pada akhirnya akan dikonversi menjadi bilangan bulat karena pengetikan longgar PHP. Lihat diri mu sendiri:
Dari manual PHP:
sumber
[42 => 'answer', 'snafu' => 'fubar']
Saya mengalami masalah ini mencoba menggabungkan array yang memiliki kunci string dan integer. Penting bahwa bilangan bulat juga akan ditangani sebagai string karena ini adalah nama untuk bidang masukan (seperti dalam ukuran sepatu dll, ..)
Ketika saya menggunakan
$data = array_merge($data, $extra);
PHP akan 'memesan ulang' kuncinya. Dalam upaya melakukan pengurutan, kunci integer (saya coba dengan6
-'6'
-"6"
bahkan(string)"6"
sebagai kunci) diganti namanya dari 0 menjadin
... Jika Anda memikirkannya, dalam banyak kasus ini akan menjadi perilaku yang diinginkan.Anda dapat mengatasinya dengan menggunakan
$data = $data + $extra;
. Cukup lurus ke depan, tapi saya tidak memikirkannya pada awalnya ^^.sumber
SALAH
Saya memiliki fungsi casting yang menangani casting array berurutan ke asosiatif,
sumber
Sebagai solusinya, Anda dapat mengenkode array PHP ke dalam objek json, dengan opsi JSON_FORCE_OBJECT.
yaitu, contoh ini:
akan menghasilkan:
sumber
Saya mengalami masalah ini pada array dengan '0' dan '' sebagai kuncinya. Itu berarti saya tidak bisa memeriksa kunci array saya dengan == atau ===.
Solusinya adalah dengan mengembalikan kunci array ke string sebelum digunakan.
sumber
Mengenai solusi @david, harap diperhatikan bahwa saat Anda mencoba mengakses nilai string dalam array asosiatif, angka tidak akan berfungsi. Dugaan saya adalah bahwa mereka dicor ke bilangan bulat di belakang layar (saat mengakses array) dan tidak ada nilai yang ditemukan. Mengakses nilai sebagai integer juga tidak akan berfungsi. Tapi Anda bisa menggunakan array_shift () untuk mendapatkan nilai atau mengulang array.
sumber
"0"
menjadi0
dengan php7.2.10
.Saya mengalami masalah ini ketika mencoba mengurutkan array di mana saya membutuhkan kunci sortir menjadi hex sha1. Ketika nilai sha1 yang dihasilkan tidak memiliki huruf, PHP mengubah kunci menjadi integer. Tapi saya perlu mengurutkan array pada urutan relatif string. Jadi saya perlu menemukan cara untuk memaksa kunci menjadi string tanpa mengubah urutan pengurutan.
Melihat bagan ASCII ( https://en.wikipedia.org/wiki/ASCII ) tanda seru diurutkan hampir sama dengan spasi dan tentunya lebih rendah dari semua angka dan huruf.
Jadi saya menambahkan tanda seru di akhir string kunci.
sumber