array, einzelne Arrays löschen, wenn kleiner als 5 Buchstaben
Sandra2000
- php
Ich würde gerne aus meinem Array alle Einträge löschen die weniger als 5 Buchstaben haben.
Sandra
Hello,
Ich würde gerne aus meinem Array alle Einträge löschen die weniger als 5 Buchstaben haben.
Na, dann tu's doch ;-)
foreach ($_my_array as $key => $value)
{
## gucken, ob das Element vom Typ String ist
## http://de3.php.net/manual/en/function.is-string.php
if (is_string($value))
{
## prüfen, ob die Anzahl der Zeichen < 5 ist
## http://de3.php.net/manual/en/function.strlen.php
## hier eventuell die Multibyte-Funktion verwenden, wenn UTF-8 o.ä. benutzt wird
if (strlen($value) < 5))
{
## Element im Original-Array löschen
unset($_my_array[$key]);
}
}
}
Foreach arbeitet intern mit einer Kopie des Arrays, sodass Du dir keine Gedanken um das Aufrücken in der Kette machen musst. Um aber das Element zu löschen, hat es daher auch keinen Sinn, unset($value) zu schreiben, sondern es ist der Zugriff über den Schlüssel auf das Originalarray notwendig.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Aber bitte mit der dafür vorgesehenen Funktion: array_filter
Nachtrag: wenn das Array selbst geändert werden soll (und nicht nur die Ausgabe) ist natürlich array_walk vorzuziehen.
(Hallo|Hi(ho)|Nabend) suit,
Nachtrag: wenn das Array selbst geändert werden soll (und nicht nur die Ausgabe) ist natürlich array_walk vorzuziehen.
EPIC FAIL? :)
Oder ist der Spruch "Das array sollte nicht innerhalb der Callbackfunktion geändert werden, d.h. es sollten keine Elemente hinzufügt oder gelöscht werden etc. Wenn das Array, auf das array_walk() angewendet wird, geändert wird, ist der Verhalten dieser Funktion nicht definiert und auch nicht vorhersagbar."[1] so unverständlich?
--
[1] Tippfehler nicht von mir. ;-)
MffG
EisFuX
EPIC FAIL? :)
Eher ein "EPIC FAIL"-FAIL :p
(Hallo|Hi(ho)|Nabend) Tom,
## gucken, ob das Element vom Typ String ist
## http://de3.php.net/manual/en/function.is-string.php
if (is_string($value))
{
## prüfen, ob die Anzahl der Zeichen < 5 ist
## http://de3.php.net/manual/en/function.strlen.php
## hier eventuell die Multibyte-Funktion verwenden, wenn UTF-8 o.ä. benutzt wird
if (strlen($value) < 5))
{
...
}
}
Wie wärs stattdessen mit:
if (preg_match('/\A.{0,4}\z/su', $value)) {
...
}
Das deckt 8-Bit und UTF-8 ab.
"Nicht-Strings" werden ignoriert, bis auf Zahlen.
Die werden als Zeichenketten interpretiert, was aber nicht unerwünscht sein muss.
MffG
EisFuX