Lebih
Menghapus elemen array kosong
Beberapa elemen dalam array string kosong berdasarkan apa yang pengguna telah disampaikan. Saya perlu untuk menghapus elemen-elemen. Aku punya ini:
foreach($linksArray as $link)
{
if($link == '')
{
unset($link);
}
}
print_r($linksArray);
Tapi itu doesn't bekerja. $linksArray
masih memiliki unsur-unsur yang kosong. Saya juga mencoba melakukan itu dengan empty()
fungsi, tetapi hasilnya adalah sama.
737
26
Seperti yang anda're berhadapan dengan sebuah array dari string, anda hanya dapat menggunakan
array_filter()
, yang terletak menangani semua ini untuk anda:Perlu diingat bahwa jika tidak ada callback yang disediakan, semua entri dari array sama dengan
PALSU
(lihat konversi ke boolean) akan dihapus. Jadi jika anda perlu untuk melestarikan unsur-unsur yang ada yaitu string yang tepat'0'
, anda akan perlu kustom callback:Anda dapat menggunakan
array_filter
untuk menghapus unsur-unsur yang kosong:Jika anda memiliki
(int) 0
dalam array, anda dapat menggunakan berikut:EDIT: Mungkin anda unsur-unsur yang tidak kosong per se, tetapi mengandung satu atau lebih ruang... Anda dapat menggunakan berikut sebelum menggunakan
array_filter
Jawaban yang paling populer pada topik ini benar-benar SALAH.
Pertimbangkan hal berikut script PHP:
Mengapa ini? Karena string yang mengandung tunggal '0' karakter juga mengevaluasi ke boolean false, jadi meskipun itu's bukan string kosong, masih akan disaring. Itu akan menjadi sebuah bug.
Lewat built-in fungsi strlen sebagai fungsi penyaringan akan bekerja, karena itu kembali non-integer nol untuk non-string kosong, dan sebuah integer nol untuk string kosong. Non-nol bilangan bulat selalu mengevaluasi ke true bila dikonversi ke boolean, sedangkan nol bilangan bulat selalu mengevaluasi ke false bila dikonversi ke boolean.
Jadi, mutlak, yang pasti, jawaban yang benar adalah:
"Jika tidak ada callback yang diberikan, semua entri input sama dengan PALSU akan dihapus." -- http://php.net/manual/en/function.array-filter.php
Anda hanya dapat melakukan
array_filter: "Jika tidak ada callback yang diberikan, semua entri input sama dengan PALSU akan dihapus." Ini berarti bahwa elemen-elemen dengan nilai NULL, 0, '0', '', PALSU, array() akan dihapus juga.
Pilihan lainnya adalah melakukan
yang akan menghapus elemen dengan nilai-nilai NULL, '' dan PALSU.
Semoga ini bisa membantu :)
UPDATE
Berikut ini adalah contoh.
Untuk meringkas:
Satu lagi kapal untuk menghapus kosong ("" string kosong) elemen-elemen dari array.
Catatan: kode Ini sengaja membuat
null
,0
danpalsu
elemen.Atau mungkin anda ingin memangkas elemen array pertama:
Catatan: kode Ini juga menghilangkan
null
danpalsu
elemen.Dalam waktu singkat:
Hal ini saya menyarankan kode:
Penjelasan:
Aku berpikir menggunakan
array_filter
adalah baik, tetapi tidak cukup, karena nilai-nilai yang sama sepertiruang
dan\n
,... simpan di array dan ini biasanya buruk.Jadi saya sarankan anda menggunakan campuran
array_filter
danarray_map
.array_map
adalah untuk pemangkasan,array_filter
adalah untuk menghapus nilai-nilai kosong,strlen
adalah untuk menjaga0
nilai', danarray_values
adalah untuk kembali pengindeksan jika anda diperlukan.Contoh:
Hasil:
Online Test:
http://phpio.net/s/5yg0
Jika anda bekerja dengan numerik array dan perlu re-index array setelah mengeluarkan unsur-unsur yang kosong, gunakan array_values fungsi:
Juga melihat: https://stackoverflow.com/questions/7558022/php-reindex-array
Yang paling sebagai jawaban salah atau setidaknya tidak sepenuhnya benar karena OP berbicara tentang string kosong saja. Berikut ini's menyeluruh penjelasan:
Apa empty berarti?
Pertama-tama, kita harus setuju pada apa kosong berarti. Apakah anda bermaksud menyaring:
$elemen === false
)kosong()
fungsi?Bagaimana anda menyaring nilai-nilai
Untuk menyaring string kosong hanya:
Hanya menyaring benar-benar palsu nilai-nilai, anda harus menggunakan panggil ulang fungsi:
Callback ini juga berguna untuk setiap kombinasi yang anda inginkan untuk menyaring "falsey" nilai-nilai, kecuali beberapa. (Misalnya, menyaring setiap
null
danpalsu
, dll, hanya menyisakan0
):Ketiga dan keempat kasus (untuk tujuan kita pada akhirnya) setara, dan untuk itu semua anda harus menggunakan default:
Aku harus melakukan ini dalam rangka untuk menjaga sebuah array nilai dari (string) 0
Untuk array multidimensi
Saya menggunakan script berikut untuk menghapus unsur-unsur yang kosong dari array
Hanya ingin berkontribusi alternatif untuk loop...juga mengatasi kesenjangan di kunci...
Dalam kasus saya saya ingin menjaga berurutan kunci array ketika operasi telah selesai (tidak hanya angka ganjil, yang adalah apa yang saya menatap. Menyiapkan kode untuk terlihat ganjil kunci tampak rapuh untuk saya dan masa depan-friendly.)
Aku sedang mencari sesuatu yang lebih seperti ini: http://gotofritz.net/blog/howto/removing-empty-array-elements-php/
Kombinasi array_filter dan array_slice melakukan trik.
$contoh = array_filter($contoh); $contoh = array_slice($contoh,0);
Tidak ada gagasan tentang efisiensi atau tolok ukur tetapi bekerja.
keluaran