Mai mult
Remove empty elementele de matrice
Unele elemente în matrice sunt siruri de caractere goale bazat pe ceea ce utilizatorul a prezentat. Am nevoie pentru a elimina aceste elemente. Eu am asta:
foreach($linksArray as $link)
{
if($link == '')
{
unset($link);
}
}
print_r($linksArray);
Dar nu't de lucru. $linksArray
are încă elemente goale. De asemenea, am încercat să fac asta cu `gol () funcția, dar rezultatul este același.
737
26
Ca tine're de-a face cu o matrice de siruri de caractere, puteți utiliza pur și simplu
array_filter()
, convenabil care se ocupă de toate acestea pentru tine:Păstrați în minte că dacă nu callback este furnizat, toate intrările de matrice egale cu "FALS" (a se vedea de conversie a boolean) va fi eliminat. Deci, dacă aveți nevoie pentru a păstra elemente care sunt adică exact string
'0'
, veți avea nevoie de un custom callback:Puteți utiliza
array_filter
pentru a elimina gol elemente:Dacă aveți(int) 0` în matrice, se pot utiliza următoarele:
EDIT: Poate că elementele nu sunt goale per se, dar conține unul sau mai multe spatii... puteți utiliza următoarele înainte de a utiliza
array_filter
Cel mai popular răspuns pe acest subiect este absolut INCORECT.
Luați în considerare următorul script PHP:
De ce este acest lucru? Pentru un șir care conține o singur '0' caracter, de asemenea, se evaluează la boolean false, astfel încât, chiar dacă-l's nu un șir gol, se va obține încă se filtrează. Asta ar fi un bug.
Trecerea built-in funcția strlen ca funcția de filtrare va funcționa, pentru că ea returnează non-zero întreg pentru un non-empty string, și un zero întreg pentru un șir gol. Non-zero întregi întotdeauna evalua la true atunci când sunt convertite la boolean, în timp ce zero întregi întotdeauna evaluează la false atunci când sunt convertite la boolean.
Deci, absolută, definitivă, răspunsul corect este:
"Dacă nu callback este furnizat, toate intrările de intrare egală cu FALSE vor fi eliminate." -- http://php.net/manual/en/function.array-filter.php
Puteți face doar
array_filter: "Dacă nu callback este furnizat, toate intrările de intrare egală cu FALSE vor fi eliminate." Acest lucru înseamnă că elementele cu valori NULL, 0, '0', '', FALS, array() va fi eliminat prea.
Cealaltă opțiune este de a face
care va elimina elementele cu valori NULL, '' și FALS.
Sper că acest lucru ajută :)
ACTUALIZARE
Aici este un exemplu.
Pentru a rezuma:
O altă linie pentru a elimina gol ("" șir gol) elemente din matrice.
Nota: Acest cod ține în mod deliberat
nul
,0
șifals
elemente.Sau poate vrei să-ți tai elementele de matrice în primul rând:
Nota: Acest cod elimină, de asemenea,
null
șifals
elemente.Pe scurt:
Acest lucru este meu a sugerat cod:
Explicatie:
Am crede că utilizarea
array_filter e bun, dar nu suficient, pentru că valorile fi o astfel de "spațiu" și
\n`,... ține în matrice și acest lucru este, de obicei rău.Așa că îți sugerez să utilizați amestec
array_filter " și " array_map
.array_map
este pentru tunderea,array_filter
este pentru a elimina valorile goale,strlen
este pentru0
valoare, șiarray_values
e de re de indexare, dacă este necesar.Probe:
Rezultate:
Test Online:
http://phpio.net/s/5yg0
Dacă lucrați cu un număr de serie și trebuie să re-index array după eliminarea gol elemente, utilizați array_values funcție:
Vezi, de asemenea: https://stackoverflow.com/questions/7558022/php-reindex-array
Cel mai votat răspuns este greșit sau cel puțin nu complet adevarat ca OP este vorba despre gol doar siruri de caractere. Aici's o explicație detaliată:
Ce empty spun?
Mai întâi de toate, trebuie să cădem de acord asupra a ceea ce gol mijloace. Adică să filtreze:
$element === false
)gol()
funcția?Cum te filtra valorile
Pentru a filtra siruri de caractere goale numai:
La numai filtra strict fals valorile, trebuie să utilizați un callback funcția:
Apel invers este, de asemenea, util pentru orice combinație în care doriți pentru a filtra "falsey" valorile, cu excepția unora. (De exemplu, filtrul la fiecare
nul
șifals
, etc, lăsând numai "0"):Al treilea și al patrulea caz sunt (pentru scopurile noastre la ultima) echivalent, și pentru că toate trebuie să utilizați este implicit:
Am avut de a face acest lucru în scopul de a menține o valoare matrice de (string) 0
Pentru matrice multidimensionale
Eu folosesc următorul script pentru a elimina gol elemente dintr-o matrice
Vreau doar să contribuie o alternativă la bucle..., de asemenea, abordarea lacunelor în cheile...
În cazul meu, am vrut să păstreze secvențială matrice a tastelor atunci când operațiunea a fost completă (nu doar numere impare, care este ceea ce mă uitam la. Setarea codului pentru a arata la fel de ciudat cheile părea fragilă la mine și nu la viitor-friendly.)
Am fost în căutarea pentru ceva mai mult ca asta: http://gotofritz.net/blog/howto/removing-empty-array-elements-php/
Combinația de array_filter și array_slice face truc.
$exemplu = array_filter($exemplu); $exemplu = array_slice($exemplu,0);
Nici o idee despre eficiența sau repere, dar funcționează.
ieșire