Mana yang lebih efisien untuk menghapus semua nilai dalam array? Yang pertama akan mengharuskan saya untuk menggunakan fungsi itu setiap kali di loop dari contoh kedua.
foreach ($array as $i => $value) {
unset($array[$i]);
}
Atau ini
foreach($blah_blah as $blah) {
$foo = array();
//do something
$foo = null;
}
unset($array)
?Jawaban:
Seperti yang dikatakan Zack dalam komentar di bawah ini, Anda hanya dapat instantiate ulang menggunakan
Jika Anda menginginkan sesuatu yang lebih kuat, gunakan yang tidak disetel karena ini juga akan menghapus $ foo dari tabel simbol, jika Anda memerlukan array nanti instantiate saja.
sumber
$foo = array();
?global $foo; unset($foo);
atauunset($GLOBALS['foo']);
unset
akan menghapus$foo
dari tabel simbol. Saya kita berbicara tentang tabel yang sangat besar saya mungkin akan merekomendasikan$foo = null; unset($foo);
karena itu juga akan menghapus memori sedikit lebih baik. Namun perilaku itu (GC) tidak terlalu konstan dan dapat berubah dari versi PHP.$foo = array();
: sebenarnya mungkin ada masalah konseptual di dalamnya: re-instantiating struktur tidak sama dengan mengosongkannya. Ketika berhadapan dengan memori, Anda tahu itu tidak sama dengan alokasi yang lambat. Jadi, meskipun mudah digunakan, instantiasi ulang mungkin bukan jawaban untuk pertanyaan ini, terutama jika seseorang perlu melakukannya berkali-kali dan dengan cepat. Mungkin berhasil, tetapi itu akan sangat bergantung pada manajemen memori PHP, IMO.Jika Anda hanya ingin mengatur ulang variabel ke array kosong, Anda cukup menginisialisasi ulangnya:
Perhatikan bahwa ini akan mempertahankan referensi apa pun untuknya:
Jika Anda ingin memecah referensi apa pun, batalkan dulu:
sumber
unset
harus digunakan. +1Sayangnya saya tidak dapat menjawab pertanyaan-pertanyaan lain, tidak memiliki reputasi yang cukup, tetapi saya perlu menunjukkan sesuatu yang SANGAT penting bagi saya, dan saya pikir itu akan membantu orang lain juga.
Membatalkan pengaturan variabel adalah cara yang baik, kecuali jika Anda memerlukan referensi dari array asli!
Untuk memperjelas apa yang saya maksud: Jika Anda memiliki fungsi yang menggunakan referensi array, misalnya fungsi pengurutan seperti
ini tidak bekerja! Hati-hati di sini,
unset
hapus referensi, sehingga variabel$array
dibuat lagi dan diisi dengan benar, tetapi nilainya tidak dapat diakses dari luar fungsi.Jadi, jika Anda memiliki referensi, Anda harus menggunakan
$array = array()
alih-alihunset
, meskipun itu kurang bersih dan mudah dimengerti.sumber
Saya akan mengatakan yang pertama, jika array asosiatif. Jika tidak, gunakan
for
loop:Meskipun jika memungkinkan, gunakan
Untuk mengatur ulang array ke array kosong lebih disukai.
sumber
Tidak
unset()
cukup bagussumber
Bagaimana dengan
$array_name = array();
?sumber
Gunakan
array_splice
untuk mengosongkan array dan menyimpan referensi:array_splice($myArray, 0);
sumber
saya telah menggunakan unset () untuk menghapus array tetapi saya telah menyadari bahwa unset () akan membuat array null maka kebutuhan untuk mendeklarasikan ulang array seperti misalnya
sumber
Saya melihat pertanyaan ini sudah lama, tetapi untuk masalah itu saya menulis fungsi rekursif untuk menghapus semua nilai dalam array. Rekursif karena kemungkinan bahwa nilai-nilai dari array yang diberikan juga merupakan array. Jadi itu bekerja untuk saya:
Jadi dengan itu saya mendapatkan array dengan semua kunci dan sub-array, tetapi nilai kosong.
sumber
Mungkin sederhana, cara ekonomis (lebih sedikit rambu untuk digunakan) ...
Kita bisa membaca dalam manual php:
sumber
Fungsi tidak disetel berguna ketika pengumpul sampah melakukan putaran sambil tidak istirahat makan siang;
Namun fungsi yang tidak disetel hanya menghancurkan referensi variabel ke data, data masih ada dalam memori dan PHP melihat memori sebagai digunakan meskipun tidak lagi memiliki pointer ke sana.
Solusi: Tetapkan
null
variabel Anda untuk menghapus data, setidaknya sampai penampung sampah dapat memperolehnya.dan kemudian hapus dengan cara yang sama!
sumber
null
akan memaksa pengumpulan sampah segera. Apakah Anda punya referensi untuk itu?NULL
akan menggantikan nilai yang disimpan di lokasi$var
variabel dalam contoh ini?$var
untuk menunjuk ke beberapaNULL
objek global dan meninggalkan$var
data sendiri sampai sampah terkumpul. Mengapa penerjemah dipaksa untuk menimpa data itu segera?Ini kuat dan teruji tidak disetel ($ gradearray); // atur ulang array
sumber