Saya memiliki array PHP yang terlihat seperti ini:
Index Key Value
[0] 1 Awaiting for Confirmation
[1] 2 Assigned
[2] 3 In Progress
[3] 4 Completed
[4] 5 Mark As Spam
Ketika saya var_dump nilai array saya mendapatkan ini:
array(5) { [0]=> array(2) { ["key"]=> string(1) "1" ["value"]=> string(25) "Awaiting for Confirmation" } [1]=> array(2) { ["key"]=> string(1) "2" ["value"]=> string(9) "Assigned" } [2]=> array(2) { ["key"]=> string(1) "3" ["value"]=> string(11) "In Progress" } [3]=> array(2) { ["key"]=> string(1) "4" ["value"]=> string(9) "Completed" } [4]=> array(2) { ["key"]=> string(1) "5" ["value"]=> string(12) "Mark As Spam" } }
Saya ingin menghapus Selesai dan Tandai Sebagai Spam . Saya tahu saya bisa unset[$array[3],$array[4])
, tetapi masalahnya adalah terkadang nomor indeks bisa berbeda.
Apakah ada cara untuk menghapusnya dengan mencocokkan nama nilai alih-alih nilai kunci?
Jawaban:
Array Anda cukup aneh: mengapa tidak menggunakan
key
as index, danvalue
as ... nilainya?Bukankah akan jauh lebih mudah jika array Anda dideklarasikan seperti ini:
Itu akan memungkinkan Anda untuk menggunakan nilai-nilai Anda
key
sebagai indeks untuk mengakses array ...Dan Anda akan dapat menggunakan fungsi untuk mencari nilai, seperti
array_search()
:Lebih mudah dibandingkan dengan array Anda, bukan?
Sebagai gantinya, dengan array Anda yang terlihat seperti ini:
Anda harus mengulang semua item, untuk menganalisis
value
, dan membatalkan set item yang tepat:Bahkan jika bisa, tidak sesederhana itu ... dan saya bersikeras: tidak bisakah Anda mengubah format array Anda, untuk bekerja dengan sistem kunci / nilai yang lebih sederhana?
sumber
sumber
Untuk array 2D ...
sumber
Anda bisa menggunakan ini
sumber
Mengapa tidak menggunakan array_diff?
Perhatikan saja bahwa array Anda akan diindeks ulang.
sumber
Coba ini:
/ edit Seperti yang disebutkan oleh JohnP, metode ini hanya berfungsi untuk array yang tidak bersarang.
sumber
Cara untuk melakukan ini dengan mengambil larik target bersarang Anda dan menyalinnya dalam satu langkah ke larik yang tidak bersarang. Hapus kunci dan kemudian tetapkan larik terpangkas terakhir ke simpul bersarang dari larik sebelumnya. Berikut adalah kode untuk membuatnya sederhana:
sumber
Saya agak tidak setuju dengan jawaban yang diterima. Terkadang arsitektur aplikasi tidak ingin Anda mengacaukan id array, atau membuatnya tidak nyaman. Misalnya, saya cukup sering menggunakan CakePHP, dan kueri database mengembalikan kunci utama sebagai nilai di setiap catatan, sangat mirip dengan yang di atas.
Dengan asumsi array tidak terlalu besar, saya akan menggunakan array_filter. Ini akan membuat salinan larik, tanpa catatan yang ingin Anda hapus, yang dapat Anda tetapkan kembali ke variabel larik asli.
Meskipun ini mungkin tampak tidak efisien, sebenarnya sangat populer akhir-akhir ini untuk memiliki variabel yang tidak dapat diubah, dan fakta bahwa sebagian besar fungsi array php mengembalikan array baru daripada futzing dengan aslinya menyiratkan bahwa PHP agak ingin Anda melakukan ini juga. Dan semakin Anda bekerja dengan array, dan menyadari betapa sulit dan menjengkelkannya fungsi unset (), pendekatan ini sangat masuk akal.
Bagaimanapun:
Anda dapat menggunakan logika inklusi apa pun (mis. Bidang id Anda) di fungsi tertanam yang Anda inginkan.
sumber
untuk penggunaan Item array tunggal
reset($item)
sumber