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']);

5voto

PJately Punkte 427

In meiner Meinung wäre der einfachste Weg für ein indiziertes Array einfach:

    if ($array) {
      //Array ist nicht leer...
    }

Die 'if'-Bedingung des Arrays würde true zurückgeben, wenn das Array nicht leer ist und false zurückgeben, wenn das Array leer ist. Dies ist für assoziative Arrays nicht anwendbar.

0 Stimmen

Cobby hat diese Technik bereits 2012 effektiv dargelegt. Seine Antwort hat derzeit 133 Upvotes.

1 Stimmen

Dies ist nicht "einfachste" als Meinungsfrage -- es ist einfachste, weil es keine Syntax gibt, die prägnanter sein kann und dies keine Funktionsaufrufüberlastung hat. Es gibt ABSOLUT KEINEN UNTERSCHIED darin, auf ein Array mit indizierten Schlüsseln oder assoziativen Schlüsseln zuzugreifen. Diese Antwort führt Forscher in die Irre. Diese Antwort ist überflüssig, dann falsch. 3v4l.org/DSLha

4voto

Ich benutze diesen Code

$variable = array();

if( count( $variable ) == 0 )
{
    echo "Array ist leer";
}
else
{
    echo "Array ist nicht leer";
}

Aber beachten Sie, dass dieser Code bei Arrays mit einer großen Anzahl von Schlüsseln viel Zeit benötigt, um sie zu zählen, im Vergleich zu den anderen Antworten hier.

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 Ihnen überein. Wenn man dieser Logik folgt, könnte man auch empty() auflösen, da empty überprüft, ob eine Variable festgelegt ist und ob der Wert falsch oder nicht ist. Einige Leute würden lieber den (kaum bemerkbaren) Overhead für die Lesbarkeit schaffen.

0 Stimmen

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

3voto

user889030 Punkte 3543

Sie können array_filter() verwenden, das für alle Situationen hervorragend funktioniert:

$ray_state = array_filter($myarray);

if (empty($ray_state)) {
    echo 'Array ist leer';
} else {
    echo 'Array ist nicht leer';
}

2 Stimmen

Dieses Argument verwendet unnötige Überprüfungen. Erstens interessiert sich der OP nicht dafür, falsche Werte aus dem Array zu filtern, bevor seine Leere überprüft wird - also haben Sie sich von der gestellten Frage abgewandt. Zweitens ist es, wie von Cobby im Jahr 2012 gezeigt wurde, nicht notwendig, eine Funktion aufzurufen, um festzustellen, ob ein deklariertes Array leer ist oder nicht.

0 Stimmen

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

0 Stimmen

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

3voto

mickmackusa Punkte 36793

Die treffendste Entscheidung zu treffen erfordert, die Qualität Ihrer Daten zu kennen und zu wissen, welche Prozesse zu folgen sind.

  1. Wenn Sie diese Zeile disqualifizieren/ignorieren/entfernen möchten, sollte der früheste Filterpunkt in der MySQL-Abfrage liegen.
  • WHERE players IS NOT NULL
  • WHERE players != ''
  • WHERE COALESCE(players, '') != ''
  • WHERE players IS NOT NULL AND players != ''
  • ...es hängt irgendwie von Ihren Ladendaten ab und es wird andere Wege geben, ich höre hier auf.
  1. Wenn Sie sich nicht zu 100% sicher sind, ob die Spalte im Ergebnis vorhanden sein wird, sollten Sie überprüfen, ob die Spalte deklariert ist. Dies bedeutet, array_key_exists(), isset() oder empty() auf der Spalte aufzurufen. Ich werde hier nicht die Unterschiede abgrenzen (dafür gibt es andere SO-Seiten, hier ist ein Anfang: 1, 2, 3). Dennoch, wenn Sie nicht die totale Kontrolle über das Ergebnis haben, haben Sie vielleicht übermäßige Anwendung "Flexibilität" betrieben und sollten überdenken, ob der Ärger beim potenziellen Zugriff auf nicht existierende Spaltendaten es wert ist. Effektiv sage ich, dass Sie niemals überprüfen sollten, ob eine Spalte deklariert ist - also sollten Sie niemals empty() für diese Aufgabe benötigen. Wenn jemand argumentiert, dass empty() angemessener ist, dann drücken sie ihre persönliche Meinung über die Expressivität von Skripten aus. Wenn Sie die Bedingung in #5 unten für mehrdeutig halten, fügen Sie einen Inline-Kommentar zu Ihrem Code hinzu - aber ich würde das nicht tun. Letztendlich gibt es keinen programmatischen Vorteil darin, den Funktionsaufruf zu tätigen.

  2. Enthält Ihr Stringwert möglicherweise eine 0, die Sie als wahr/gültig/nicht leer betrachten möchten? Wenn ja, dann müssen Sie nur überprüfen, ob der Spaltenwert Länge hat.

Hier ist ein Demo mit strlen(). Dies wird anzeigen, ob der String sinnvolle Array-Elemente erzeugen wird, wenn er explodiert wird.

  1. Ich denke, es ist wichtig zu erwähnen, dass Sie durch bedingungsloses Explodieren GARANTIERT ein nicht leeres Array erzeugen werden. Hier ist der Beweis: Demo Mit anderen Worten, die Überprüfung, ob das Array leer ist, ist völlig nutzlos - es wird jedes Mal nicht leer sein.

  2. Wenn Ihr String KEINEN Nullwert enthalten wird (weil es sich um eine CSV handelt, die mit IDs beginnt, die bei 1 starten und nur ansteigen), dann reicht if ($gamerow['players']) { - Ende der Geschichte.

  3. ...aber warten Sie, was tun Sie, nachdem Sie die Leere dieses Werts bestimmt haben? Wenn Sie etwas weiter unten im Skript haben, das $playerlist erwartet, aber Sie diese Variable bedingt deklarieren, riskieren Sie, den Wert der vorherigen Zeile zu verwenden oder erneut Hinweise zu generieren. Müssen Sie $playerlist bedingungslos als etwas deklarieren? Wenn im String kein wahrer Wert enthalten ist, profitiert Ihre Anwendung davon, ein leeres Array zu deklarieren? Wahrscheinlich ist die Antwort ja. In diesem Fall können Sie sicherstellen, dass die Variable ein Array-Typ ist, indem Sie auf ein leeres Array zurückgreifen - so spielt es keine Rolle, ob Sie diese Variable in eine Schleife einfügen. Die folgenden bedingten Deklarationen sind alle äquivalent.

  • if ($gamerow['players']) { $playerlist = explode(',', $gamerow['players']); } else { $playerlist = []; }
  • $playerlist = $gamerow['players'] ? explode(',', $gamerow['players']) : [];

Warum habe ich mir die Mühe gemacht, diese sehr einfache Aufgabe so ausführlich zu erklären?

  1. Ich habe fast jede Antwort auf dieser Seite öffentlich gemeldet, und diese Antwort wird wahrscheinlich Racheabstimmungen erhalten (das passiert oft bei Whistleblowern, die diese Website verteidigen - wenn eine Antwort Downvotes hat und keine Kommentare, seien Sie immer skeptisch).
  2. Ich halte es für wichtig, dass Stackoverflow eine vertrauenswürdige Ressource ist, die Forscher nicht mit Fehlinformationen und suboptimalen Techniken vergiftet.
  3. So zeige ich, wie wichtig es mir ist, aufstrebende Entwickler dazu zu bringen, sowohl das Wie als auch das Warum zu lernen, anstatt nur einer Generation von Copy-Paste-Programmierern vorgefüttert zu werden.
  4. Ich benutze häufig alte Seiten, um neue doppelte Seiten zu schließen - das ist die Verantwortung von erfahrenen Freiwilligen, die wissen, wie man schnell Duplikate findet. Ich kann es nicht über mich bringen, eine alte Seite mit schlechten/falschen/suboptimalen/irreführenden Informationen als Referenz zu verwenden, denn dann tue ich aktiv einem neuen Forscher einen schlechten Dienst.

0 Stimmen

@ptr ist hier.

2voto

Hassan Qasim Punkte 215

Sie können die folgenden PHP-Funktionen verwenden, um zu überprüfen, ob ein Array leer ist oder nicht

Verwendung der empty()-Funktion

$variable = array();
    if(empty($variable)){
    echo("Das Array ist leer.");
    }

AUSGABE: Das Array ist leer

Verwendung der sizeof()-Funktion

$variable = array();
$arraysize = sizeof($variable);
echo("Die Größe des Arrays beträgt $arraysize. \n");
if(sizeof($variable) == 0)
echo("Das Array ist leer.");

AUSGABE:

Die Größe des Arrays beträgt 0.

Das Array ist leer.

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