1059 Stimmen

Leere Array-Elemente entfernen

Einige Elemente in meinem Array sind leere Zeichenfolgen auf der Grundlage dessen, was der Benutzer eingegeben hat. Ich muss diese Elemente zu entfernen. Ich habe dies:

foreach($linksArray as $link)
{
    if($link == '')
    {
        unset($link);
    }
}
print_r($linksArray);

Aber es funktioniert nicht. $linksArray hat immer noch leere Elemente. Ich habe auch versucht, es mit dem empty() Funktion, aber das Ergebnis ist das gleiche.

2046voto

BoltClock Punkte 660640

Da Sie es mit einem Array von Strings zu tun haben, können Sie einfach mit array_filter() die all dies bequem für Sie erledigt:

print_r(array_filter($linksArray));

Bitte beachten Sie, dass wenn kein Rückruf angegeben wird , alle Einträge des Arrays gleich FALSE (siehe Umwandlung in boolesche Werte ) werden entfernt. Wenn Sie also Elemente beibehalten müssen, die z. B. eine exakte Zeichenkette sind '0' benötigen Sie einen eigenen Rückruf:

// PHP 7.4 and later
print_r(array_filter($linksArray, fn($value) => !is_null($value) && $value !== ''));

// PHP 5.3 and later
print_r(array_filter($linksArray, function($value) { return !is_null($value) && $value !== ''; }));

// PHP < 5.3
print_r(array_filter($linksArray, create_function('$value', 'return $value !== "";')));

Hinweis: Wenn Sie das Array nach dem Entfernen der leeren Elemente neu indizieren müssen, verwenden Sie: $linksArray = array_values(array_filter($linksArray));

200voto

Andrew Moore Punkte 90339

Sie können verwenden array_filter um leere Elemente zu entfernen:

$emptyRemoved = array_filter($linksArray);

Wenn Sie eine (int) 0 in Ihrem Array, können Sie Folgendes verwenden:

$emptyRemoved = remove_empty($linksArray);

function remove_empty($array) {
  return array_filter($array, '_remove_empty_internal');
}

function _remove_empty_internal($value) {
  return !empty($value) || $value === 0;
}

EDIT: Vielleicht sind Ihre Elemente nicht per se leer, sondern enthalten ein oder mehrere Leerzeichen... Sie können Folgendes verwenden, bevor Sie array_filter

$trimmedArray = array_map('trim', $linksArray);

191voto

Ron Cemer Punkte 1716

Die häufigste Antwort zu diesem Thema ist absolut FALSCH.

Betrachten Sie das folgende PHP-Skript:

<?php
$arr = array('1', '', '2', '3', '0');
// Incorrect:
print_r(array_filter($arr));
// Correct:
print_r(array_filter($arr, 'strlen'));

Warum ist das so? Weil eine Zeichenkette, die ein einzelnes '0'-Zeichen enthält, auch als boolesches false ausgewertet wird, so dass sie, obwohl sie keine leere Zeichenkette ist, trotzdem gefiltert wird. Das wäre ein Fehler.

Die Übergabe der eingebauten strlen-Funktion als Filterfunktion wird funktionieren, da sie für eine nicht leere Zeichenkette eine Ganzzahl ungleich Null und für eine leere Zeichenkette eine Ganzzahl Null zurückgibt. Ganzzahlen, die nicht Null sind, werden bei der Konvertierung in boolesche Werte immer als true ausgewertet, während Ganzzahlen mit Null bei der Konvertierung in boolesche Werte immer als false ausgewertet werden.

Die absolute, endgültige und richtige Antwort lautet also:

$arr = array_filter($arr, 'strlen');

110voto

tamasd Punkte 5526
$linksArray = array_filter($linksArray);

"Wenn kein Callback übergeben wird, werden alle Einträge von input gleich FALSE entfernt." -- http://php.net/manual/en/function.array-filter.php

58voto

matija kancijan Punkte 1155
    $myarray = array_filter($myarray, 'strlen');  //removes null values but leaves "0"
    $myarray = array_filter($myarray);            //removes all null values

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X