Lisää
Elementin poistaminen joukosta PHP:ssä
Onko olemassa helppo tapa poistaa elementti matriisista PHP:n avulla siten, että foreach ($array)
ei enää sisällä kyseistä elementtiä?
Luulin, että sen asettaminen arvoon null
auttaisi, mutta ilmeisesti se ei toimi.
2349
3
Joukkoelementin poistamiseen on erilaisia tapoja, joista toiset ovat hyödyllisempiä joihinkin erityistehtäviin kuin toiset.
Poista yksi array-elementti
Jos haluat poistaa vain yhden array-elementin, voit käyttää
\unset()
tai vaihtoehtoisesti\array_splice()
.Jos sinulla on arvo, mutta et tiedä avainta, jolla elementti poistetaan, voit käyttää
\array_search()
saadaksesi avaimen.\unset()
menetelmäHuomaa, että kun käytät
\unset()
-menetelmää, matriisin avaimet eivät muutu/reindeksi muutu. Jos haluat indeksoida avaimet uudelleen, voit käyttää\array_values()
\unset()
:n jälkeen, mikä muuttaa kaikki avaimet numeerisiksi luetelluiksi avaimiksi alkaen 0:sta.Koodi
Tulos
\array_splice()
menetelmäJos käytät
\array_splice()
-menetelmää, avaimet indeksoidaan automaattisesti uudelleen, mutta assosiatiiviset avaimet eivät muutu toisin kuin\array_values()
-menetelmässä, joka muuntaa kaikki avaimet numeerisiksi avaimiksi.Lisäksi
\array_splice()
tarvitsee toisena parametrina offsetin, ei avainta!.Koodi
Tulos
array_splice()
samoin kuin\unset()
ottavat matriisin viitteenä, ja tämä tarkoittaa, että näiden funktioiden palautusarvoja ei haluta antaa takaisin matriisiin.Poista useita array-elementtejä
Jos haluat poistaa useampia array-elementtejä etkä halua kutsua
\unset()
tai\array_splice()
useita kertoja, voit käyttää funktioita\array_diff()
tai\array_diff_key()
riippuen siitä, tiedätkö niiden elementtien arvot vai avaimet, jotka haluat poistaa.\array_diff()
menetelmäJos tiedät niiden array-elementtien arvot, jotka haluat poistaa, voit käyttää
\array_diff()
-menetelmää. Kuten aiemmin\unset()
:n kanssa, se ei muuta/reindeksiä matriisin avaimia.Koodi
Tulos
\array_diff_key()
menetelmäJos tiedät niiden elementtien avaimet, jotka haluat poistaa, kannattaa käyttää
\array_diff_key()
. Tässä tapauksessa sinun on varmistettava, että annat avaimet avaimina toisessa parametrissa, etkä arvoina. Muussa tapauksessa joudut kääntämään arraya\array_flip()
:llä. Ja tässäkään tapauksessa avaimet eivät muutu/reindikoidu.Koodi
Tulos
Jos haluat käyttää
\unset()
tai\array_splice()
poistamaan useita elementtejä, joilla on sama arvo, voit käyttää\array_keys()
saadaksesi kaikki tietyn arvon avaimet ja poistaaksesi sitten kaikki elementit.On huomattava, että
unset()
pitää indeksit koskemattomina, mitä odottaisi, kun käytetään merkkijonoindeksejä (array as hashtable), mutta se voi olla melko yllättävää, kun käsitellään kokonaislukuindeksoituja matriiseja:Joten
array_splice()
voidaan käyttää, jos haluat normalisoida kokonaislukuavaimet. Toinen vaihtoehto on käyttääarray_values()
unset()
jälkeen: