Perhatikan 2 contoh ini ...
$key = 'jim';
// example 1
if (isset($array[$key])) {
// ...
}
// example 2
if (array_key_exists($key, $array)) {
// ...
}
Saya tertarik mengetahui apakah salah satu dari ini lebih baik. Saya selalu menggunakan yang pertama, tetapi telah melihat banyak orang menggunakan contoh kedua di situs ini.
Jadi, mana yang lebih baik? Lebih cepat? Niat yang lebih jelas?
php
performance
alex
sumber
sumber
isset
tidak akan pernah berperilaku persis sepertiarray_key_exists
, contoh kode yang seharusnya membuatnya berperilaku secara identik melempar Pemberitahuan jika kunci tidak ada.in_array
? maettig.com/1397246220in_array
adalahO(n)
karena memeriksa nilai bukan kunci. Mereka hampir selalu akan menjadi lebih lambat kecuali jika Andan
sangat kecil.$array[$key] === null
?Jawaban:
isset()
lebih cepat, tetapi tidak sama denganarray_key_exists()
.array_key_exists()
murni memeriksa apakah kunci ada, bahkan jika nilainyaNULL
.Sedangkan
isset()
akan kembalifalse
jika kunci ada dan nilainyaNULL
.sumber
isset
bukan fungsi pencarian array, itu hanya memeriksa keberadaan variabel dalam tabel simbol dan tidak akan beralih pada array.array_key_exists
di sisi lain akan mengulangi / mencari kunci di dimensi pertama dari array yang ditentukan.array_key_exists()
hanya akan memeriksa apakah kuncinya ada dalam array, yang berarti ia tidak akan melakukan pencarian karena ini adalah tabel hash.Jika Anda tertarik pada beberapa tes yang saya lakukan baru-baru ini:
https://stackoverflow.com/a/21759158/520857
Ringkasan:
sumber
Nah, perbedaan utama adalah bahwa
isset()
tidak akan kembalitrue
untuk kunci array yang sesuai dengan nilai nol, sementara ituarray_key_exists()
tidak.Menjalankan patokan kecil menunjukkan bahwa
isset()
itu lebih cepat tetapi mungkin tidak sepenuhnya akurat.sumber
isset($array[$i]) || $array[$i] === null
tidak masuk akal karena akan kembalitrue
untuk setiap kasus. Anda tidak akan pernah salah dariisset($array[$i]) || $array[$i] === null
input apa pun.Saya ingin menambahkan 2 sen pada pertanyaan ini, karena saya kehilangan jalan tengah.
Seperti yang sudah mengatakan
isset()
akan mengevaluasi nilai kunci sehingga akan kembalifalse
jika nilai yangnull
manaarray_key_exists()
hanya akan memeriksa apakah kunci ada dalam array.Saya telah menjalankan patokan sederhana menggunakan PHP 7, hasil yang ditampilkan adalah waktu yang dibutuhkan untuk menyelesaikan iterasi:
Saya telah menambahkan hasil dari fungsi kustom ini dengan tolok ukur ini untuk penyelesaian:
Seperti yang terlihat dan sudah diceritakan
isset()
adalah metode tercepat tetapi dapat mengembalikan false jika nilainyanull
. Ini bisa memberikan hasil yang tidak diinginkan dan biasanya orang harus menggunakannyaarray_key_exists()
jika itu masalahnya.Namun ada jalan tengah dan itu menggunakan
isset() || array_key_exists()
. Kode ini umumnya menggunakan fungsi yang lebih cepatisset()
dan jikaisset()
mengembalikan false saja maka gunakanarray_key_exists()
untuk memvalidasi. Ditampilkan pada tabel di atas, ini sama cepatnya dengan panggilan biasaisset()
.Ya, ini sedikit lebih untuk menulis dan membungkusnya dalam suatu fungsi lebih lambat tetapi jauh lebih mudah. Jika Anda memerlukan ini untuk kinerja, memeriksa data besar, dll, tuliskan sepenuhnya, jika tidak, jika penggunaannya 1 kali, biaya overhead yang sangat kecil
array_key_isset()
dapat diabaikan.sumber
Dengan Php 7 memberi kemungkinan untuk menggunakan Null Coalescing Operator .
Jadi sekarang Anda dapat menetapkan nilai default jika nilainya nol atau jika kunci tidak ada:
sumber
ada perbedaan dari php.net Anda akan membaca:
Tes yang sangat informal menunjukkan
array_key_exists()
sekitar 2,5 kali lebih lambat daripadaisset()
sumber
Menggabungkan
isset()
danis_null()
memberikan performa terbaik terhadap fungsi lain seperti:array_key_exists()
,isset()
,isset()
+array_key_exists()
,is_null()
,isset()
+is_null()
, satu-satunya masalah di sini adalah fungsi tidak hanya akan mengembalikan false jika kunci tidak ada, tapi bahkan yang ada kunci dan memiliki nilai nol.Skrip benchmark:
Kredit : http://www.zomeoff.com/php-fast-way-to-determine-a-key-elements-existance-in-an-an-array/
sumber
Adapun "lebih cepat": Cobalah (uang saya aktif
array_key_exists()
, tetapi saya tidak dapat mencobanya sekarang).Adapun "lebih jelas dalam niat":
array_key_exists()
sumber
Jelas contoh kedua lebih jelas maksudnya, tidak ada pertanyaan tentang itu. Untuk mengetahui apa yang dilakukan contoh # 1, Anda harus terbiasa dengan keanehan variabel inisialisasi PHP - dan kemudian Anda akan mengetahui bahwa itu berfungsi secara berbeda untuk nilai-nilai nol, dan seterusnya.
Mengenai mana yang lebih cepat - saya tidak bermaksud berspekulasi - jalankan dalam loop ketat beberapa ratus ribu kali pada versi PHP Anda dan Anda akan mengetahuinya :)
sumber
Kode Anda
isset($array[$i]) || $array[$i] === null
,, akan mengembalikan true dalam setiap kasus, bahkan jika kunci tidak ada (dan menghasilkan pemberitahuan indeks yang tidak ditentukan). Untuk kinerja terbaik, apa yang Anda inginkan adalahif (isset($array[$key]) || array_key_exists($key,$array)){doWhatIWant();}
sumber
$array[$i] === null
akan dieksekusi adalah ketika $ i ada dalam array dan memiliki nilai NULL ..