Lebih
Menghapus sebuah elemen dari sebuah array di PHP
Apakah ada cara mudah untuk menghapus sebuah elemen dari array menggunakan PHP, seperti yang foreach ($array)
tidak lagi termasuk elemen itu?
Saya berpikir bahwa pengaturan untuk null
akan melakukan hal itu, tetapi tampaknya tidak bekerja.
2349
37
Ada berbagai cara untuk menghapus elemen array, di mana beberapa lebih berguna untuk beberapa tugas tertentu daripada yang lain.
Menghapus satu elemen array
Jika anda ingin menghapus salah satu elemen array, anda dapat menggunakan
\unset()
atau\array_splice()
.Juga jika anda memiliki nilai dan don't tahu kunci untuk menghapus elemen yang dapat anda gunakan
\array_search()
untuk mendapatkan kunci.\unset()
metodePerhatikan bahwa ketika anda menggunakan
\unset()
kunci array won't perubahan/daftar ulang. Jika anda ingin reindex tombol anda dapat menggunakan\array_values()
setelah\unset()
yang akan mengkonversi semua kunci numerik dihitung tombol mulai dari 0.Kode
Output
\array_splice()
metodeJika anda menggunakan
\array_splice()
tombol akan secara otomatis reindexed, tapi asosiatif kunci won't perubahan, sebagai lawan dari\array_values()
yang akan mengkonversi semua tombol ke tombol numerik.Juga
\array_splice()
kebutuhan offset, tidak penting! sebagai parameter kedua.Kode
Output
array_splice()
sama seperti\unset()
mengambil array dengan referensi, dan ini berarti anda don't ingin menetapkan kembali nilai-nilai dari fungsi-fungsi itu kembali ke hotel.Menghapus beberapa elemen array
Jika anda ingin menghapus beberapa elemen array dan don't ingin menelepon
\unset()
atau\array_splice()
beberapa kali anda dapat menggunakan fungsi\array_diff()
atau\array_diff_key()
tergantung pada apakah anda tahu nilai-nilai atau kunci dari unsur-unsur yang ingin anda hapus.\array_diff()
metodeJika anda tahu nilai dari elemen array yang ingin anda hapus, kemudian anda dapat menggunakan
\array_diff()
. Seperti sebelumnya dengan\unset()
tidak't perubahan/daftar ulang kunci dari array.Kode
Output
\array_diff_key()
metodeJika anda tahu kunci dari unsur-unsur yang ingin anda hapus, kemudian anda ingin menggunakan
\array_diff_key()
. Di sini anda harus memastikan anda melewati kunci tombol di kedua parameter dan bukan sebagai nilai-nilai. Jika tidak, anda harus membalik array\array_flip()
. Dan juga di sini kunci won't perubahan/daftar ulang.Kode
Output
Juga jika anda ingin menggunakan
\unset()
atau\array_splice()
untuk menghapus beberapa elemen dengan nilai yang sama anda dapat menggunakan\array_keys()
untuk mendapatkan semua kunci untuk nilai tertentu dan kemudian menghapus semua elemen.Perlu dicatat bahwa
unset()
akan membuat indeks tak tersentuh, yang adalah apa yang anda'd harapkan ketika menggunakan string index (array sebagai hashtable), tetapi dapat cukup mengejutkan ketika berhadapan dengan integer array diindeks:Jadi
array_splice()
dapat digunakan jika anda'd seperti untuk menormalkan integer kunci. Pilihan lain adalah menggunakanarray_values()
setelahunset()
:Ini adalah output dari kode di atas:
Sekarang, array_values() akan reindex numerik array dengan baik, tapi itu akan menghapus semua kunci string dari array dan menggantinya dengan angka-angka. Jika anda perlu untuk melestarikan kunci nama (string), atau reindex array jika semua kunci numerik, gunakan array_merge():
Output
Jika anda memiliki sebuah array berindeks numerik di mana semua nilai-nilai yang unik (atau mereka yang non-unik tapi anda ingin menghapus semua contoh dari nilai tertentu), anda hanya dapat menggunakan array_diff() untuk menghapus pencocokan elemen, seperti ini:
Misalnya:
Ini akan menampilkan berikut ini:
Dalam contoh ini, elemen dengan nilai 'Charles' dihapus karena dapat diverifikasi oleh sizeof() menyebut laporan itu ukuran 4 untuk awal array, dan 3 setelah penghapusan.
Juga, untuk sebuah nama unsur:
Menghancurkan satu elemen dari sebuah array
unset()
Output akan sama:
Jika anda perlu untuk kembali index array:
Maka output akan sama:
Pop elemen dari array - mengembalikan nilai elemen dihapus
campuran array_pop(array &$array)
Output akan
Menghapus elemen pertama (merah) dari array, - return nilai dari elemen dihapus
campuran array_shift ( array &$array )
Output akan sama:
Output:
Untuk menghindari melakukan pencarian satu dapat bermain-main dengan
array_diff
:Dalam hal ini salah satu doesn't harus mencari/menggunakan kunci.
Array asosiatif
Untuk array asosiatif, gunakan
diset
:Numeric array
Untuk numerik array, gunakan
array_splice
:Catatan
Menggunakan
diset
untuk numerik array tidak akan menghasilkan kesalahan, tapi itu akan mengacaukan indeks anda:Jika anda harus menghapus beberapa nilai-nilai dalam array dan entri dalam array adalah objek atau data terstruktur,
[array_filter][1]
adalah taruhan terbaik anda. Entri yang kembali yang benar dari fungsi callback akan dipertahankan.Jika anda perlu untuk menghapus beberapa elemen dari array asosiatif, anda dapat menggunakan array_diff_key() (di sini digunakan dengan array_flip()):
Output:
unset()
menghancurkan ditentukan variabel-variabel.Perilaku
unset()
dalam sebuah fungsi dapat bervariasi tergantung pada jenis variabel yang anda mencoba untuk menghancurkan.Jika variabel global adalah
unset()
dalam sebuah fungsi, hanya variabel lokal hancur. Variabel dalam pemanggilan lingkungan akan mempertahankan nilai yang sama seperti sebelumnyaunset()
disebut.Jawaban dari kode di atas akan menjadi bar.
Untuk
unset()
global variabel dalam sebuah fungsi:Solusi:
Penjelasan lebih lanjut:
Menggunakan fungsi-fungsi ini akan menghapus semua referensi ke elemen-elemen ini dari PHP. Jika anda ingin menyimpan key dalam array, tetapi dengan nilai kosong, menetapkan string kosong untuk unsur:
Selain sintaks, ada's logis perbedaan antara menggunakan unset() dan menetapkan '' unsur. Yang pertama mengatakan
Ini doesn't ada lagi,
sedangkan yang kedua mengatakanIni masih ada, tapi nilainya adalah string kosong.
Jika anda're berurusan dengan angka-angka, menugaskan 0 dapat menjadi alternatif yang lebih baik. Jadi, jika perusahaan menghentikan produksi dari model XL1000 sprocket, itu akan memperbarui persediaan dengan:
Namun, jika untuk sementara berlari keluar dari XL1000 sprocket, tapi berencana untuk menerima kiriman baru dari pabrik pada akhir pekan ini, ini lebih baik:
Jika anda unset() unsur, PHP menyesuaikan array sehingga perulangan tetap bekerja dengan benar. Itu doesn't compact array untuk mengisi hilang lubang. Ini adalah apa yang kita maksud ketika kita mengatakan bahwa semua array asosiatif, bahkan ketika mereka muncul untuk menjadi numerik. Berikut ini's contoh:
Untuk compact array menjadi padat diisi numeric array, gunakan array_values():
Atau, array_splice() secara otomatis reindexes array untuk menghindari meninggalkan lubang:
Hal ini berguna jika anda're menggunakan array sebagai sebuah antrian dan ingin menghapus item dari antrian sementara masih memungkinkan akses acak. Untuk menghapus aman pertama atau elemen terakhir dari array, gunakan array_shift() dan array_pop(), masing-masing.
I'd hanya ingin mengatakan saya memiliki objek tertentu yang memiliki variabel atribut (itu pada dasarnya pemetaan meja dan aku mengubah kolom pada tabel, sehingga atribut pada objek, yang mencerminkan meja akan berbeda juga):
Seluruh tujuan dari
$field
hanya, jadi saya don't harus melihat di mana-mana dalam kode ketika mereka're berubah, saya hanya melihat awal dari kelas dan mengubah daftar dari atribut dan $bidang array konten untuk mencerminkan atribut baru.Misalkan anda memiliki array berikut:
Untuk menghapus
storage
, lakukan:Dan anda mendapatkan:
Ikuti default fungsi:
i)
ii)
iii)
iv)
Membuat array dalam variabel
$array
dan kemudian di mana saya telah menempatkan 'elemen yang ingin anda hapus' anda menempatkan sesuatu seperti: "a". Dan jika anda ingin menghapus beberapa item kemudian: "a", "b".