Saya perlu menghapus item array dengan nilai yang diberikan:
if (in_array($id, $items)) {
$items = array_flip($items);
unset($items[ $id ]);
$items = array_flip($items);
}
Bisakah itu dilakukan dengan cara yang lebih pendek (lebih efisien)?
Jawaban:
Itu dapat dicapai dengan satu-liner sederhana.
Memiliki array ini:
Anda dapat melakukan:
Dan nilai
$arr
akan:Semoga ini membantu menulis kode yang indah.
sumber
array_diff
fungsinya non-destruktif, ia mengembalikan array baru.$referenced = array_diff($referenced, $items_to_remove);
Saya menambahkan jawaban kedua. Saya menulis skrip pembandingan cepat untuk mencoba berbagai metode di sini.
Metode ketiga,
array_keys()
dengan parameter pencarian opsional yang ditentukan, tampaknya sejauh ini merupakan metode terbaik. Contoh keluaran:Menilai dengan ini, solusi yang akan saya gunakan adalah:
sumber
Bagaimana tentang:
atau untuk beberapa nilai:
Ini akan mencegah kehilangan kunci juga, yang merupakan efek samping dari
array_flip()
.sumber
untuk menghapus
$rm_val
dari$arr
sumber
Solusi yang paling kuat akan digunakan
array_filter
, yang memungkinkan Anda untuk menentukan fungsi penyaringan Anda sendiri.Tetapi beberapa orang mungkin mengatakan itu sedikit berlebihan, dalam situasi Anda ...
Sebuah
foreach
loop sederhana untuk melewati array dan menghapus item yang tidak Anda inginkan sudah cukup.Sesuatu seperti ini, dalam kasus Anda, mungkin harus melakukan trik:
sumber
Coba array_search ()
sumber
array_keys()
tampaknya berkinerja lebih baik daripadaarray_search()
untuk tugas ini.Solusi Anda hanya berfungsi jika Anda memiliki nilai unik dalam array Anda
Lihat:
Cara yang lebih baik akan tidak disetel dengan array_search , dalam satu lingkaran jika perlu.
sumber
tanpa flip:
sumber
sumber
Anda dapat menggunakan fungsi array_splice untuk operasi ini Ref: array_splice
sumber