Saya ingin mengulang melalui array dengan foreach
untuk memeriksa apakah ada nilai. Jika nilainya ada, saya ingin menghapus elemen yang berisi itu.
Saya memiliki kode berikut:
foreach($display_related_tags as $tag_name) {
if($tag_name == $found_tag['name']) {
// Delete element
}
}
Saya tidak tahu cara menghapus elemen setelah nilainya ditemukan. Bagaimana cara menghapusnya?
Saya harus menggunakan foreach
untuk masalah ini. Mungkin ada alternatif lain foreach
, dan Anda dipersilakan untuk membagikannya.
$key => &$tag_name
stackoverflow.com/a/2008893/922522json_encode()
. Anda dapat menyelesaikan ini dengan$display_related_tags = array_values ($display_related_tags);
setelahforeach
loop.$projects = array_filter($projects, function ($project) { return count($project->roles) > 0; });
itu mengubah hasil menjadi objek.Solusi yang lebih baik adalah dengan menggunakan
array_filter
fungsi:Seperti yang tertulis dalam dokumentasi php :
sumber
ARRAY_FILTER_USE_KEY - pass key as the only argument to callback instead of the value ARRAY_FILTER_USE_BOTH - pass both value and key as arguments to callback instead of the value
Default is 0 which will pass value as the only argument to callback instead.
, membaca jawaban lagi dalam kasus ini tentu saja tidak masalah seperti yang Anda klaim.display_related_tags = array_values(display_related_tags);
setelahnya.sumber
Alih-alih melakukan perulangan foreach () pada array, akan lebih cepat menggunakan array_search () untuk menemukan kunci yang tepat. Pada array kecil, saya akan menggunakan foreach untuk readibility yang lebih baik, tetapi untuk array yang lebih besar, atau kode yang sering dieksekusi, ini harus sedikit lebih optimal:
Operator perbandingan ketat! == diperlukan, karena array_search () bisa mengembalikan 0 sebagai indeks dari $ unwantedValue.
Juga, contoh di atas hanya akan menghapus nilai pertama $ unwantedValue, jika $ unwantedValue bisa muncul lebih dari sekali dalam $ array, Anda harus menggunakan array_keys (), untuk menemukan semuanya:
Periksa http://php.net/manual/en/function.array-search.php untuk informasi lebih lanjut.
sumber
jika Anda memiliki skenario di mana Anda harus menghapus lebih dari satu nilai dari larik foreach dalam hal ini Anda harus meneruskan nilai dengan referensi di masing-masing: Saya mencoba menjelaskan skenario ini:
dalam loop kedua Anda ingin menghapus entri loop pertama jangan datang lagi dalam iterasi untuk tujuan kinerja atau kemudian hapus dari memori juga karena dalam memori mereka hadir dan akan datang dalam iterasi.
sumber
Sudah ada jawaban yang memberi penjelasan tentang cara tidak disetel. Daripada mengulang kode di semua kelas Anda, buat fungsi seperti di bawah ini dan gunakan dalam kode kapan pun diperlukan. Dalam logika bisnis, terkadang Anda tidak ingin mengekspos beberapa properti. Silakan lihat di bawah satu panggilan liner untuk menghapus
Panggilan seperti:
sumber
Seperti yang telah disebutkan, Anda ingin melakukan foreach dengan kuncinya, dan membatalkan pengaturan menggunakan kuncinya - tetapi perhatikan bahwa mutasi array selama iterasi secara umum adalah ide yang buruk, meskipun saya tidak yakin dengan aturan PHP tentang ini begitu saja.
sumber
foreach
ataufor
konstruksi daripada iterasi secara umum?