Vairāk
Elementa dzēšana no PHP masīva
Vai ir vienkāršs veids, kā, izmantojot PHP, dzēst elementu no masīva tā, lai foreach ($array)
vairs neietvertu šo elementu?
Es domāju, ka to izdarītu, iestatot to uz null
, bet acīmredzot tas nedarbojas.
2349
3
Ir dažādi veidi, kā dzēst masīva elementu, un daži no tiem ir noderīgāki dažiem specifiskiem uzdevumiem nekā citi.
Izdzēst vienu masīva elementu
Ja vēlaties izdzēst tikai vienu masīva elementu, varat izmantot
\unset()
vai\array_splice()
.Arī tad, ja jums ir vērtība, bet nezināt atslēgu elementa dzēšanai, varat izmantot
\array_search()
, lai iegūtu atslēgu.{\unset()
metodeŅemiet vērā, ka, izmantojot
\unset()
, masīva atslēgas nemainīsies/nereindeksēsies. Ja vēlaties atslēgas pārindeksēt, pēc\unset()
varat izmantot\array_values()
, kas visas atslēgas pārveidos skaitliskās uzskaitītās atslēgās, sākot no 0.Kods
Izvades
\array_splice()
metodeIzmantojot
\array_splice()
, atslēgas tiks automātiski pārindeksētas, bet asociatīvās atslēgas nemainīsies, atšķirībā no\array_values()
, kas visas atslēgas konvertēs uz skaitliskajām atslēgām.Arī
\array_splice()
kā otrais parametrs ir nepieciešams nobīde, nevis atslēga.Kods
Izvades
array_splice()
tāpat kā\unset()
ņem masīvu pēc atsauces, un tas nozīmē, ka šo funkciju atgrieztās vērtības nevēlaties piešķirt atpakaļ masīvam.Izdzēst vairākus masīva elementus
Ja vēlaties dzēst vairākus masīva elementus un nevēlaties vairākas reizes izsaukt
\unset()
vai\array_splice()
, varat izmantot funkcijas\array_diff()
vai\array_diff_key()
atkarībā no tā, vai jūs zināt to elementu vērtības vai atslēgas, kurus vēlaties dzēst.\array_diff()
metodeJa jums ir zināmas to masīva elementu vērtības, kurus vēlaties dzēst, varat izmantot
\array_diff()
. Tāpat kā iepriekš ar\unset()
tā nemainīs/neindeksēs masīva atslēgas.Kods
Izvades
\array_diff_key()
metodeJa jūs zināt elementu, kurus vēlaties dzēst, atslēgas, tad jūs vēlaties izmantot
\array_diff_key()
. Šajā gadījumā jums ir jāpārliecinās, ka otrajā parametrā atslēgas tiek nodotas kā atslēgas, nevis kā vērtības. Pretējā gadījumā masīvs ir jāpārvērš, izmantojot\array_flip()
. Un arī šeit atslēgas nemainīsies/nereindeksēsies.Kods
Izvades
Ja vēlaties izmantot
\unset()
vai\array_splice()
, lai dzēstu vairākus elementus ar vienu un to pašu vērtību, varat izmantot\array_keys()
, lai iegūtu visus atslēgas atslēgas konkrētai vērtībai un pēc tam dzēstu visus elementus.Jāatzīmē, ka
unset()
saglabās indeksus neskartus, kas ir tas, ko varētu sagaidīt, ja tiek izmantoti virknes indeksi (masīvs kā hashtable), bet var būt diezgan pārsteidzoši, ja tiek izmantoti veselu skaitļu indeksēti masīvi:Tātad
array_splice()
var izmantot, ja vēlaties normalizēt veselu skaitļu atslēgas. Vēl viena iespēja ir izmantotarray_values()
pēcunset()
: