589 Stimmen

Wie überprüft man, ob ein Array in PHP leer ist?

players wird entweder leer sein oder eine durch Kommas getrennte Liste (oder ein einzelner Wert). Wie kann man am einfachsten überprüfen, ob es leer ist? Ich nehme an, dass ich dies sofort tun kann, sobald ich das $gameresult-Array in $gamerow abrufe? In diesem Fall wäre es wahrscheinlich effizienter, das Aufteilen des $playerlist zu überspringen, wenn es leer ist, aber um des Arguments willen, wie würde ich auch überprüfen, ob ein Array leer ist?

$gamerow = mysql_fetch_array($gameresult);
$playerlist = explode(",", $gamerow['players']);

20voto

kenorb Punkte 134883

Wenn Sie falsche oder leere Zeilen ausschließen möchten (wie z. B. 0 => ''), bei denen empty() fehlschlägt, können Sie Folgendes ausprobieren:

if (array_filter($playerlist) == []) {
  // Array ist leer!
}

array_filter(): Wenn keine Callback-Funktion bereitgestellt wird, werden alle Einträge des Arrays, die gleich FALSE sind (siehe Umwandlung in boolesche Werte), entfernt.

Wenn Sie alle NULL, FALSE und leeren Strings ('') entfernen möchten, aber Nullwerte (0) beibehalten möchten, können Sie strlen als Callback verwenden, z. B.:

$is_empty = array_filter($playerlist, 'strlen') == [];

0 Stimmen

Das ist die richtige Antwort auf eine andere Frage. Die Verwendung von Array-Filter wird vorhandene Elemente mit falschen Werten zerstören. Das ist nicht das, was der Fragesteller verlangt.

15voto

Tim Ogilvy Punkte 1840

Wenn Sie feststellen möchten, ob die Variable, die Sie testen, tatsächlich explizit ein leeres Array ist, könnten Sie etwas wie folgt verwenden:

if ($variableToTest === array()) {
    echo 'das ist explizit ein leeres Array!';
}

8voto

Rob Punkte 6184

Warum hat niemand diese Antwort gesagt:

$array = [];

if($array == []) {
    // array ist leer
}

1 Stimmen

Ihre Aussage ist nicht korrekt. Jemand HAT diese Antwort gesagt - Tim Ogilvy - ein Jahr früher. Verwenden von eckigen Klammern anstelle von array() ist dasselbe.

0 Stimmen

Während unter der Haube es dieselbe Antwort ist... technisch gesehen. Ich habe anstelle der veralteten Array-Funktion die eckigen Klammern verwendet.

3 Stimmen

Wenn Sie diesen Ansatz verwenden, sollten Sie auch === anstelle von == verwenden, da es schneller ist.

7voto

zloctb Punkte 9390
is_array($detect) && empty($detect);

is_array

0 Stimmen

Dies sind unnötige Überprüfungen. Der OP verwendet explode() - es gibt Array-Typ-Daten zurück. Das Überprüfen von empty() ist ein unnötiger Funktionsaufruf. Wie von Cobby 2012 angegeben, ist if($detect) alles, was erforderlich ist. Diese Lösung sollte nicht für diese Aufgabe oder andere implementiert werden. Man könnte argumentieren, dass man Situationen abdeckt, die über den Rahmen dieser Frage hinausgehen, aber es besteht nie ein Bedarf, empty() NACH is_array() aufzurufen, denn wenn die Variable nicht "gesetzt" ist, wird is_array() "Notice: Undefined variable" generieren, wenn isset(), dann ist empty() überflüssig, nutze einfach Cobys Antwort.

1 Stimmen

@mickmackusa was ist, wenn die Variable gesetzt ist (auf ein leeres Array)? Vielleicht möchten Sie überprüfen, ob die Daten, die Sie auswerten werden, überhaupt ein Array sind, und dann möchten Sie überprüfen, ob es leer ist oder nicht.

0 Stimmen

@Ich versuche es erneut, wenn Sie überprüfen möchten, ob eine deklarierte Variable ein Array ist und nicht leer ist, dann genügt dies: if (is_array($detect) && $detect) Wenn Sie eine Variable erzwingen möchten, ein Array zu sein, können Sie sie als Array casten (das ein Array wie es ist lässt, die erste Ebene eines Objekts in ein Array umwandelt und alle skalaren Werte in ein Array mit einem einzelnen Element umwandelt) $detect = (array)$detect; if ($detect)

7voto

nothingchen01 Punkte 247

Wenn Sie den Array-Inhalt überprüfen möchten, können Sie Folgendes verwenden:

$arr = array();

if(!empty($arr)){
  echo "nicht leer";
}
else 
{
  echo "leer";
}

Siehe hier: http://codepad.org/EORE4k7v

0 Stimmen

Wie von Cobby 2012 gezeigt, ist es nicht notwendig, eine Funktion aufzurufen, um zu überprüfen, ob ein deklariertes Array leer ist oder nicht.

0 Stimmen

@mickmackusa Ich stimme hier nicht mit dir überein. Geht man nach dieser Logik könnten wir empty() auflösen, da empty überprüft, ob eine Variable gesetzt ist und ob der Wert falsch oder nicht ist. Einige Leute würden lieber den (kaum bemerkbaren) Overhead für die Lesbarkeit erzeugen.

0 Stimmen

Wenn Sie einen deklarativen Codierungsstil bevorzugen, verwenden Sie empty(). Mein Punkt ist, dass es nicht notwendig ist.

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