Einige Elemente in meinem Array sind leere Zeichenfolgen, basierend auf dem, was der Benutzer übermittelt hat. Ich muss diese Elemente entfernen. Ich habe das:
foreach($linksArray as $link)
{
if($link == '')
{
unset($link);
}
}
print_r($linksArray);
Aber es funktioniert nicht. $linksArray
hat noch leere Elemente. Ich habe es auch mit der empty()
Funktion versucht , aber das Ergebnis ist das gleiche.
Antworten:
Da es sich um eine Reihe von Zeichenfolgen handelt, können Sie diese einfach verwenden
array_filter()
, um all dies bequem für Sie zu erledigen:Beachten Sie, dass, wenn kein Rückruf bereitgestellt wird , alle Einträge des Arrays gleich
FALSE
(siehe Konvertieren in Boolesche Werte ) entfernt werden. Wenn Sie also Elemente beibehalten müssen, bei denen es sich um exakte Zeichenfolgen handelt'0'
, benötigen Sie einen benutzerdefinierten Rückruf:quelle
array_filter
sollte die leeren Elemente entfernen. Und wenn die PHP-Definition von leer nicht ganz mit Ihrer Definition übereinstimmt, können Sie die Rückrufoption mit einer anonymen Funktion ausfüllen, die unerwünschte Elemente ausgibt. Anscheinend müssen Sie PHP 5.3 oder höher haben, um anonyme Rückrufe zu verwenden. stackoverflow.com/questions/2412299/…false
Elemente entfernt werden. ( php.net/manual/en/function.array-filter.php )a
das zweite Mal setzt nur das erste zurück.Sie können
array_filter
damit leere Elemente entfernen:Wenn Sie
(int) 0
in Ihrem Array haben, können Sie Folgendes verwenden:BEARBEITEN: Möglicherweise sind Ihre Elemente nicht per se leer, sondern enthalten ein oder mehrere Leerzeichen ... Sie können Folgendes verwenden, bevor Sie es verwenden
array_filter
quelle
scalar
Elemente in Ihrem Array. Ja. Andernfalls können Sie das nicht tun.function remove_empty($array) { return array_filter($array, function($value){return !empty($value) || $value === 0;}); }
array_map()
tat die Magie, weil ich Leerzeichen in diesen leeren Arrays hatte!Die beliebteste Antwort zu diesem Thema ist absolut falsch.
Betrachten Sie das folgende PHP-Skript:
Warum ist das? Da eine Zeichenfolge, die ein einzelnes '0'-Zeichen enthält, auch als boolescher Wert false ausgewertet wird, wird sie gefiltert, auch wenn sie keine leere Zeichenfolge ist. Das wäre ein Fehler.
Das Übergeben der integrierten strlen-Funktion als Filterfunktion funktioniert, da für eine nicht leere Zeichenfolge eine Ganzzahl ungleich Null und für eine leere Zeichenfolge eine Ganzzahl Null zurückgegeben wird. Ganzzahlen ungleich Null werden bei der Konvertierung in Boolesche Werte immer als wahr ausgewertet, während Ganzzahlen bei der Konvertierung in Boolesche Werte immer als falsch ausgewertet werden.
Die absolute, endgültige und richtige Antwort lautet also:
quelle
0
,""
,null
)strlen() expects parameter 1 to be string, array given
"Wenn kein Rückruf bereitgestellt wird, werden alle Eingaben der Eingabe gleich FALSE entfernt." - http://php.net/manual/en/function.array-filter.php
quelle
quelle
Du kannst es einfach tun
array_filter: "Wenn kein Rückruf bereitgestellt wird, werden alle Eingaben der Eingabe gleich FALSE entfernt." Dies bedeutet, dass Elemente mit den Werten NULL, 0, '0', '', FALSE, array () ebenfalls entfernt werden.
Die andere Option ist zu tun
Dadurch werden Elemente mit den Werten NULL, '' und FALSE entfernt.
Hoffe das hilft :)
AKTUALISIEREN
Hier ist ein Beispiel.
Um zusammenzufassen:
quelle
quelle
false
und0
. In Anbetracht der Tatsache, dass dies in der gleichen Minute wie die akzeptierte Antwort veröffentlicht wurde (das ist unsicher und falsch), kann ich nur davon ausgehen, dass Ihre 8 Upvotes im Vergleich zur 649 der akzeptierten Antwort darauf zurückzuführen sind, dass letztere eine einzeilige Lösung ist.array_filter()
ein sauberer Ansatz als eineforeach()
Schleife wäretrim()
, würde ich empfehlenif(is_string($link) && trim($link) === '')
Ein weiterer Liner zum Entfernen leerer ("" leerer String) Elemente aus Ihrem Array.
Hinweis: Dieser Code absichtlich hält
null
,0
undfalse
Elemente.Oder vielleicht möchten Sie zuerst Ihre Array-Elemente zuschneiden:
Hinweis: Dieser Code entfernt auch
null
undfalse
Elemente.quelle
Zusamenfassend:
Dies ist mein vorgeschlagener Code:
Erläuterung:
Ich denke, die Verwendung
array_filter
ist gut, aber nicht genug, weil die Werte wiespace
und\n
... im Array bleiben und dies normalerweise schlecht ist.Also schlage ich vor , verwenden Sie Mischung
array_filter
undarray_map
.array_map
dient zum Trimmen,array_filter
zum Entfernen leerer Werte,strlen
zum Beibehalten von0
Werten undarray_values
zum erneuten Indizieren, falls erforderlich.Proben:
Ergebnisse:
Online-Test:
http://phpio.net/s/5yg0
quelle
Wenn Sie mit einem numerischen Array arbeiten und das Array nach dem Entfernen leerer Elemente neu indizieren müssen, verwenden Sie die Funktion array_values :
Siehe auch: PHP-Neuindizierungsarray?
quelle
Die am häufigsten gewählte Antwort ist falsch oder zumindest nicht ganz richtig, da das OP nur von leeren Zeichenfolgen spricht. Hier ist eine gründliche Erklärung:
Was bedeutet leer ?
Zunächst müssen wir uns darauf einigen, was leer bedeutet. Wollen Sie herausfiltern:
$element === false
)empty()
Funktion?Wie filtern Sie die Werte heraus?
So filtern Sie nur leere Zeichenfolgen heraus :
Um nur streng falsche Werte herauszufiltern , müssen Sie eine Rückruffunktion verwenden:
Der Rückruf ist auch nützlich für jede Kombination, in der Sie die "Falsey" -Werte herausfiltern möchten, mit Ausnahme einiger. (Filtern Sie beispielsweise alle
null
undfalse
usw. und lassen Sie nur übrig0
):Der dritte und vierte Fall sind (endlich für unsere Zwecke) gleichwertig, und dafür müssen Sie nur die Standardeinstellung verwenden:
quelle
null
und herausnehmen möchtenfalse
, aber 0 belassen, können Sie auch die integriertestrlen
Funktion von php als Rückruf verwenden.Ich musste dies tun, um einen Array-Wert von (string) 0 beizubehalten
quelle
quelle
Für mehrdimensionales Array
quelle
quelle
quelle
Ich benutze das folgende Skript, um leere Elemente aus einem Array zu entfernen
quelle
Ich möchte nur eine Alternative zu Schleifen beitragen ... auch Lücken in Schlüsseln schließen ...
In meinem Fall wollte ich nach Abschluss des Vorgangs sequentielle Array-Schlüssel behalten (nicht nur ungerade Zahlen, worauf ich starrte. Das Einrichten von Code für die Suche nach ungeraden Schlüsseln schien mir fragil und nicht zukunftsfreundlich.)
Ich suchte nach etwas Ähnlichem: http://gotofritz.net/blog/howto/removing-empty-array-elements-php/
Die Kombination von array_filter und array_slice macht den Trick.
$example = array_filter($example); $example = array_slice($example,0);
Keine Ahnung von Effizienz oder Benchmarks, aber es funktioniert.
quelle
Ausgabe
quelle
quelle
Nur eine Zeile: Update (danke an @suther):
quelle
Verwenden Sie die
array_filter
Funktion, um leere Werte zu entfernen:quelle
Leere Array-Elemente entfernen
Es klappt!
quelle
Gemäß Ihrer Methode können Sie diese Elemente einfach in einem anderen Array abfangen und das folgende wie folgt verwenden:
quelle
versuchen Sie dieses ** ** Beispiel
quelle
Ich denke, array_walk ist hier viel besser geeignet
Ausgabe:
Wir haben auch Leerzeichen von den gültigen Werten abgeschnitten
Schließlich werden nur (null), (Boolean False) und ('') als leere Zeichenfolgen betrachtet
Was
False
ist es in Ordnung , es zu entfernen, weil AFAIK der Benutzer nicht Boolesche Werte einreichen kann.quelle
Bei solchen Dingen ist es viel besser, explizit anzugeben, was Sie wollen und was nicht.
Es wird dem nächsten Mann helfen, nicht überrascht zu werden, wenn er sich
array_filter()
ohne Rückruf verhält. Zum Beispiel bin ich auf diese Frage gekommen, weil ich vergessen habe, ob siearray_filter()
entfernt wurdeNULL
oder nicht. Ich habe Zeit verschwendet, als ich die unten stehende Lösung hätte verwenden und meine Antwort erhalten können.Außerdem ist die Logik sprachangnostisch in dem Sinne, dass der Code in eine andere Sprache kopiert werden kann, ohne das Verhalten einer PHP-Funktion verstehen zu müssen, wie
array_filter
wenn kein Rückruf übergeben wird.In meiner Lösung ist auf einen Blick klar, was passiert. Entfernen Sie eine Bedingung, um etwas beizubehalten, oder fügen Sie eine neue Bedingung hinzu, um zusätzliche Werte zu filtern.
Ignorieren Sie die tatsächliche Verwendung von,
array_filter()
da ich nur einen benutzerdefinierten Rückruf übergebe. Sie können dies auch in eine eigene Funktion extrahieren, wenn Sie dies wünschen. Ich benutze es nur als Zucker für eineforeach
Schleife.Ein weiterer Vorteil dieses Ansatzes besteht darin, dass Sie die Filterprädikate in eine abstrakte Funktion aufteilen können, die einen einzelnen Wert pro Array filtert und zu einer zusammensetzbaren Lösung aufbaut.
Siehe dieses Beispiel und die Inline-Kommentare für die Ausgabe.
Jetzt können Sie dynamisch eine Funktion namens
filterer()
using erstellenpipe()
, die diese teilweise angewendeten Funktionen für Sie anwendet.quelle