Bagaimana jika saya ingin mendapatkan kunci dan nilainya?
Timberman
51
PHP <7.3
Jika Anda tidak cukup tahu tentang array (Anda tidak yakin apakah kunci pertama foo atau bar ) maka array mungkin juga, mungkin, kosong .
Jadi akan lebih baik untuk memeriksa, terutama jika ada kemungkinan bahwa nilai yang dikembalikan mungkin boolean FALSE:
$value = empty($arr)? $default : reset($arr);
Kode di atas menggunakan resetdan memiliki efek samping (me-reset pointer internal array), jadi Anda mungkin lebih suka menggunakan array_sliceuntuk dengan cepat mengakses salinan elemen pertama array:
Jika array tidak terlalu besar, Anda sebenarnya tidak perlu array_slicedan bisa mendapatkan salinan seluruh array kunci, lalu dapatkan item pertama:
$key = count($arr)? array_keys($arr)[0]:null;
Jika Anda memiliki array yang sangat besar, panggilan untuk array_keysakan membutuhkan waktu dan memori yang signifikan lebih dari array_slice(kedua fungsi berjalan di array, tetapi yang terakhir berakhir segera setelah telah mengumpulkan jumlah item yang diperlukan - yang merupakan satu).
Pengecualian penting adalah ketika Anda memiliki kunci pertama yang menunjuk ke objek yang sangat besar dan berbelit-belit. Dalam hal ini array_sliceakan menduplikasi objek besar pertama itu, sementara array_keyshanya akan mengambil kunci.
PHP 7.3
PHP 7.3 mengimplementasikan array_key_first()juga array_key_last(). Ini secara eksplisit disediakan untuk mengakses kunci pertama dan terakhir secara efisien tanpa mengatur ulang keadaan internal array sebagai efek samping.
Jadi dalam PHP 7.3 yang pertama nilai dari $arraydapat diakses dengan
$array[array_key_first($array)];
Anda masih harus memeriksa apakah array tidak kosong, atau Anda akan mendapatkan kesalahan:
$firstKey = array_key_first($array);if(null=== $firstKey){
$value ="Array is empty";// An error should be handled here}else{
$value = $array[$firstKey];}
@AhmedShefeer, jawaban yang lain bukan hanya yang diterima tetapi sudah ada selama delapan tahun lagi . Saya semacam mengambil remah-remah di sini :-D. Tapi terima kasih untuk mosi percaya!
LSerni
1
Menurut saya ini adalah jawaban terbaik, karena satu-satunya yang tidak usang yang memberikan kunci dan nilainya adalah loop foreach yang dibatalkan, yang canggung. Jawaban lain hanya memberikan nilai tanpa kunci.
sootsnoot
1
Saya suka ini, pendekatan modern dan diperbarui dengan waktu.
sanjeet bisht
@LSerni Tidak tahu apakah Anda masih aktif, tapi saya macet dan pos yang dijelaskan dan diperbarui dengan baik ini menyelamatkan saya. Terima kasih
Karena solusinya ada di baris kode pertama Anda, tetapi Anda terus menulis baris yang sama sekali tidak dibutuhkan.
Markus
21
reset tidak akan mengembalikan kunci
HarryFink
3
+1 untuk 'loop palsu'. Saya harus mengambil kunci dan nilai elemen pertama, sementara tidak melalui setiap elemen. The reset()Fungsi hanya akan mengambil nilai pertama.
Phil Cross
2
+1 untuk loop palsu juga, saya perlu menyimpan kunci sehingga reset bukan pilihan
isJustMe
25
Ada beberapa opsi. array_shift()akan mengembalikan elemen pertama, tetapi juga akan menghapus elemen pertama dari array.
$first = array_shift($array);
current() akan mengembalikan nilai array yang ditunjuk oleh penunjuk memori internal, yang merupakan elemen pertama secara default.
$first = current($array);
Jika Anda ingin memastikan bahwa itu menunjuk ke elemen pertama, Anda selalu dapat menggunakan reset().
Saya suka jawaban ini sebagai yang paling lengkap, tetapi perhatikan reset()sebenarnya mengembalikan elemen, jadi setelah itu dengan $first = current($array)berlebihan.
Tom Auger
9
Hanya agar kita memiliki beberapa opsi lain: reset($arr);cukup baik jika Anda tidak berusaha mempertahankan pointer array di tempatnya, dan dengan array yang sangat besar itu menimbulkan jumlah overhead yang minimal. Yang mengatakan, ada beberapa masalah dengan itu:
reset()adalah pilihan yang jauh lebih baik karena mengembalikan false jika array kosong. solusi Anda tidak akan berfungsi misalnya dalam pertanyaan
Northys
1
Dalam PHP 7+ sesuatu seperti ini akan berfungsi:array_values($array)[0] ?? FALSE
MarthyM
4
Uji apakah variabelnya adalah array sebelum mendapatkan elemen pertama. Ketika secara dinamis membuat array jika diatur ke nol Anda mendapatkan kesalahan.
Ini hanya berfungsi ketika pointer internal berada di elemen pertama. Meskipun ini bagus karena tidak mengatur ulang posisi pointer, itu hanya berfungsi ketika pointer sudah beristirahat.
cjc
1
Dimulai dengan PHP 7.3.0 dimungkinkan untuk dilakukan tanpa mengatur ulang pointer internal. Anda akan menggunakannya array_key_first. Jika Anda yakin bahwa array Anda memiliki nilai-nilai di dalamnya maka Anda bisa melakukannya:
$first = $array[array_key_first($array)];
Kemungkinan besar, Anda akan ingin menangani case di mana array kosong:
Jawaban:
reset()
memberi Anda nilai pertama array jika Anda memiliki elemen di dalam array:Ini juga memberi Anda
FALSE
jika array kosong.sumber
$arr = array(/* stuff */); $val = $arr? reset($arr): /* value to indicate array is empty */;
PHP <7.3
Jika Anda tidak cukup tahu tentang array (Anda tidak yakin apakah kunci pertama foo atau bar ) maka array mungkin juga, mungkin, kosong .
Jadi akan lebih baik untuk memeriksa, terutama jika ada kemungkinan bahwa nilai yang dikembalikan mungkin boolean FALSE:
Kode di atas menggunakan
reset
dan memiliki efek samping (me-reset pointer internal array), jadi Anda mungkin lebih suka menggunakanarray_slice
untuk dengan cepat mengakses salinan elemen pertama array:Dengan asumsi Anda ingin mendapatkan kunci dan nilainya secara terpisah , Anda perlu menambahkan parameter keempat ke
array_slice
:Untuk mendapatkan item pertama sebagai pasangan (
key => value
):Modifikasi sederhana untuk mendapatkan lalu item, kunci dan nilai secara terpisah:
kinerja
Jika array tidak terlalu besar, Anda sebenarnya tidak perlu
array_slice
dan bisa mendapatkan salinan seluruh array kunci, lalu dapatkan item pertama:Jika Anda memiliki array yang sangat besar, panggilan untuk
array_keys
akan membutuhkan waktu dan memori yang signifikan lebih dariarray_slice
(kedua fungsi berjalan di array, tetapi yang terakhir berakhir segera setelah telah mengumpulkan jumlah item yang diperlukan - yang merupakan satu).Pengecualian penting adalah ketika Anda memiliki kunci pertama yang menunjuk ke objek yang sangat besar dan berbelit-belit. Dalam hal ini
array_slice
akan menduplikasi objek besar pertama itu, sementaraarray_keys
hanya akan mengambil kunci.PHP 7.3
PHP 7.3 mengimplementasikan
array_key_first()
jugaarray_key_last()
. Ini secara eksplisit disediakan untuk mengakses kunci pertama dan terakhir secara efisien tanpa mengatur ulang keadaan internal array sebagai efek samping.Jadi dalam PHP 7.3 yang pertama nilai dari
$array
dapat diakses denganAnda masih harus memeriksa apakah array tidak kosong, atau Anda akan mendapatkan kesalahan:
sumber
Loop palsu yang terputus pada iterasi pertama:
Atau gunakan
each()
( peringatan: ditinggalkan pada PHP 7.2.0 ):sumber
reset()
Fungsi hanya akan mengambil nilai pertama.Ada beberapa opsi.
array_shift()
akan mengembalikan elemen pertama, tetapi juga akan menghapus elemen pertama dari array.current()
akan mengembalikan nilai array yang ditunjuk oleh penunjuk memori internal, yang merupakan elemen pertama secara default.Jika Anda ingin memastikan bahwa itu menunjuk ke elemen pertama, Anda selalu dapat menggunakan
reset()
.sumber
reset()
sebenarnya mengembalikan elemen, jadi setelah itu dengan$first = current($array)
berlebihan.Hanya agar kita memiliki beberapa opsi lain:
reset($arr);
cukup baik jika Anda tidak berusaha mempertahankan pointer array di tempatnya, dan dengan array yang sangat besar itu menimbulkan jumlah overhead yang minimal. Yang mengatakan, ada beberapa masalah dengan itu:Cara melakukan ini tanpa mengubah pointer:
Manfaatnya
$arr[reset(array_keys($arr))];
adalah ia memunculkan peringatan jika array benar-benar kosong.sumber
cara lain yang mudah dan sederhana untuk melakukannya menggunakan array_values
sumber
reset()
adalah pilihan yang jauh lebih baik karena mengembalikan false jika array kosong. solusi Anda tidak akan berfungsi misalnya dalam pertanyaanarray_values($array)[0] ?? FALSE
Uji apakah variabelnya adalah array sebelum mendapatkan elemen pertama. Ketika secara dinamis membuat array jika diatur ke nol Anda mendapatkan kesalahan.
Sebagai contoh:
sumber
Kita bisa
$first = reset($array);
Dari pada
Sebagai
reset()
mengembalikan elemen pertama array setelah reset;
sumber
Anda dapat membuat:
sumber
Gunakan fungsi reset () untuk mengeluarkan item pertama dari array itu tanpa mengetahui kunci untuknya seperti ini.
output // 400
sumber
Anda bisa mencoba ini.
Untuk mendapatkan nilai pertama array: -
Untuk mendapatkan kunci pertama dari array
sumber
Anda bisa menggunakan array_shift
sumber
Saya melakukan ini untuk mendapatkan nilai pertama dan terakhir. Ini bekerja dengan lebih banyak nilai juga.
sumber
Dimulai dengan PHP 7.3.0 dimungkinkan untuk dilakukan tanpa mengatur ulang pointer internal. Anda akan menggunakannya
array_key_first
. Jika Anda yakin bahwa array Anda memiliki nilai-nilai di dalamnya maka Anda bisa melakukannya:Kemungkinan besar, Anda akan ingin menangani case di mana array kosong:
sumber
Anda bisa menggunakannya
$array[0]
. itu akan memberi Anda item pertama selalusumber