Saya baru saja menggunakan array_filter untuk menghapus entri yang hanya memiliki nilai '' dari array, dan sekarang saya ingin menerapkan transformasi tertentu di atasnya tergantung pada placeholder mulai dari 0, tetapi sayangnya itu masih mempertahankan indeks asli. Saya mencari beberapa saat dan tidak dapat melihat apa-apa, mungkin saya hanya melewatkan yang sudah jelas, tetapi pertanyaan saya adalah ...
Bagaimana saya dapat dengan mudah mengatur ulang indeks array untuk memulai dari 0 dan berurutan dalam array BARU, daripada mempertahankan indeks lama?
array_filter()
- Anda dapat membersihkan lebih dari yang Anda inginkan. Berikut adalah beberapa penjelasan dengan demo: stackoverflow.com/a/43657056/2943403Jawaban:
Jika Anda memanggil
array_values
array Anda, itu akan diindeks ulang dari nol.sumber
Jika Anda menggunakan filter Array lakukan sebagai berikut
sumber
Saya khawatir tentang berapa banyak programmer yang dengan polosnya menyalin / menempelkan
array_values(array_filter())
metode ke dalam kode mereka - Saya bertanya-tanya berapa banyak programmer yang tanpa disadari mengalami masalah karena keserakahan array_filter. Atau lebih buruk, berapa banyak orang yang tidak pernah menemukan bahwa fungsi tersebut menghapus terlalu banyak nilai dari larik ...Saya akan menyajikan alternatif yang lebih baik untuk proses dua bagian pengupasan
NULL
elemen dari array dan mengindeks ulang kunci.Namun, pertama-tama, sangat penting bagi saya untuk menekankan sifat serakah
array_filter()
dan bagaimana hal ini dapat menghentikan proyek Anda secara diam-diam. Berikut adalah array dengan nilai campuran di dalamnya yang akan mengekspos masalah:Nilai nol akan dihapus terlepas dari huruf besar / kecil.
Tapi lihat apa yang tersisa dalam array ketika kita menggunakan array_values () & array_filter () :
Array keluaran ($ array):
Sekarang lihat apa yang Anda dapatkan dengan metode saya yang menggunakan array_walk () & is_null () untuk menghasilkan array baru yang difilter:
Ini dapat ditulis dalam beberapa baris agar lebih mudah dibaca / dijelaskan:
Array keluaran ($ filter):
Dengan metode saya, Anda mendapatkan kunci yang diindeks ulang, semua nilai bukan nol, dan tidak ada nilai nol. Satu baris yang bersih, portabel, dan andal untuk semua kebutuhan penyaringan null array Anda. Ini sebuah demonstrasi .
Demikian pula, jika Anda ingin menghapus elemen kosong, salah, dan nol (mempertahankan nol), keempat metode ini akan berfungsi:
atau
atau
atau
Keluaran:
Terakhir, bagi siapa saja yang lebih menyukai sintaks konstruksi bahasa, Anda juga dapat memasukkan nilai yang memenuhi syarat ke dalam larik baru untuk menerbitkan indeks baru.
sumber
array_values(array_filter($arr, function($el) {return $el !== '';}))
? Itu sepertinya cara alami untuk melakukan apa yang diminta OP.array_filter()
kecuali jika pengetahuan mendalam mereka tentang data memungkinkan penyaringan serakah tanpa efek samping. (Perhatian lebih lanjut:empty()
berperilaku dengan cara yang sama dan juga menyertakan larik kosong dalam keserakahannya.)array_filter()
berperilaku persis seperti yang Anda harapkan berdasarkan apa yang tertulis di manual: php.net/manual/en/function.array-filter.php "Jika tidak ada callback disediakan, semua entri array sama dengan FALSE (lihat mengonversi ke boolean ) akan dihapus. " Dan harus menjadi pengetahuan umum di antara programmer PHP bahwa 0, null, false, '' dan '0' semuanya bernilai false saat dipaksa ke boolean.Penggunaan
array_values()
:sumber