Mere
Sletning af et element fra et array i PHP
Er der en nem måde at slette et element fra et array med PHP, således at foreach ($array)
ikke længere indeholder dette element?
Jeg troede, at det ville gøre det, hvis man satte det til null
, men det virker åbenbart ikke.
2349
3
Der er forskellige måder at slette et array-element på, og nogle er mere nyttige til nogle specifikke opgaver end andre.
Slet et array-element
Hvis du ønsker at slette kun ét arrayelement kan du bruge
\unset()
eller alternativt\array_splice()
.Hvis du har værdien og ikke kender nøglen til at slette elementet, kan du også bruge
\array_search()
for at få nøglen.\unset()
metodeBemærk, at når du bruger
\unset()
, vil array-nøglerne ikke ændres/reindexeres. Hvis du ønsker at reindeksere nøglerne, kan du bruge\array_values()
efter\unset()
, som vil konvertere alle nøgler til numeriske enumererede nøgler startende fra 0.Kode
Output
\array_splice()
metodeHvis du bruger
\array_splice()
vil nøglerne automatisk blive reindexeret, men de associative nøgler vil ikke ændre sig i modsætning til\array_values()
, som vil konvertere alle nøgler til numeriske nøgler.Desuden har
\array_splice()
brug for offset, ikke nøglen! som den anden parameter.Kode
Output
array_splice()
og\unset()
tager arrayet som reference, og det betyder, at du ikke ønsker at tildele returværdierne af disse funktioner tilbage til arrayet.Slet flere array-elementer
Hvis du ønsker at slette flere array-elementer og ikke ønsker at kalde
\unset()
eller\array_splice()
flere gange, kan du bruge funktionerne\array_diff()
eller\array_diff_key()
, afhængigt af om du kender værdierne eller nøglerne for de elementer, som du ønsker at slette.\array_diff()
metodeHvis du kender værdierne af de array-elementer, som du vil slette, kan du bruge
\array_diff()
. Som før med\unset()
vil det ikke ændre/reindexere nøglerne i arrayet.Kode
Output
\array_diff_key()
metodeHvis du kender nøglerne til de elementer, som du vil slette, skal du bruge
\array_diff_key()
. Her skal du sikre dig, at du overgiver nøglerne som nøgler i den anden parameter og ikke som værdier. Ellers skal du vende arrayet med\array_flip()
. Og også her vil nøglerne ikke ændres/reindexeres.Kode
Output
Hvis du også ønsker at bruge
\unset()
eller\array_splice()
til at slette flere elementer med samme værdi, kan du bruge\array_keys()
til at hente alle nøglerne for en bestemt værdi og derefter slette alle elementer.Det skal bemærkes, at
unset()
bevarer indeksene uberørt, hvilket er hvad man forventer, når man bruger string-indekser (array som hashtable), men kan være ret overraskende, når man har med heltalsindekserede arrays at gøre:Så
array_splice()
kan bruges, hvis du gerne vil normalisere dine heltalsnøgler. En anden mulighed er at brugearray_values()
efterunset()
: