Einige akzeptable Antworten, aber ich dachte, ich würde etwas ausführlicher erklären, wann PHP bestimmt, ob ein Array leer ist.
Hauptnotizen:
Ein Array mit einem Schlüssel (oder Schlüsseln) wird von PHP als nicht leer bestimmt.
Da Array-Werte Schlüssel benötigen, bestimmt das Vorhandensein oder Nichtvorhandensein von Werten in einem Array nicht, ob es leer ist, sondern ob es keine Schlüssel (und somit auch keine Werte) gibt.
Daher sagt das Überprüfen eines Arrays mit empty()
nicht einfach aus, ob Sie Werte haben oder nicht, sondern ob das Array leer ist und Schlüssel Bestandteil eines Arrays sind.
Denken Sie daher darüber nach, wie Sie Ihr Array erstellen, bevor Sie sich für eine Überprüfungsmethode entscheiden.
Zum Beispiel wird ein Array Schlüssel haben, wenn ein Benutzer Ihr HTML-Formular übermittelt und jedes Formularfeld einen Array-Namen hat (d. h. name="array[]"
).
Ein nicht leeres Array wird für jedes Feld erstellt, da für jedes Formularfeldarray automatisch inkrementierte Schlüsselwerte vorhanden sind.
Betrachten Sie beispielsweise diese Arrays:
/* Einige Arrays zuweisen */
// Array mit vom Benutzer definierten Schlüssel und Wert
$ArrayOne = array("BenutzerSchlüsselA" => "BenutzerWertA", "BenutzerSchlüsselB" => "BenutzerWertB");
// Array mit automatisch inkrementiertem Schlüssel und benutzerdefiniertem Wert
// da ein Formularfeld mit Benutzereingabe zurückgegeben würde
$ArrayTwo[] = "BenutzerWert01";
$ArrayTwo[] = "BenutzerWert02";
// Array mit automatisch inkrementiertem Schlüssel und ohne Wert
// da ein Formularfeld ohne Benutzereingabe zurückgegeben würde
$ArrayThree[] = '';
$ArrayThree[] = '';
Wenn Sie die Array-Schlüssel und -Werte für die obigen Arrays ausgeben, erhalten Sie Folgendes:
ARRAY EINS:
[BenutzerSchlüsselA] => [BenutzerWertA]
[BenutzerSchlüsselB] => [BenutzerWertB]
ARRAY ZWEI:
[0] => [BenutzerWert01]
[1] => [BenutzerWert02]
ARRAY DREI:
[0] => []
[1] => []
Und die Überprüfung der obigen Arrays mit empty()
liefert die folgenden Ergebnisse:
ARRAY EINS:
$ArrayOne ist nicht leer
ARRAY ZWEI:
$ArrayTwo ist nicht leer
ARRAY DREI:
$ArrayThree ist nicht leer
Ein Array wird immer leer sein, wenn Sie ein Array zuweisen, es aber danach nicht verwenden, z. B .:
$ArrayFour = array();
Dies wird leer sein, d. h. PHP gibt TRUE zurück, wenn Sie empty()
auf das obenstehende anwenden.
Wenn Ihr Array also Schlüssel hat - sei es z. B. durch Eingaben in einem Formular oder wenn Sie sie manuell zuweisen (d. h. ein Array mit Datenbankspaltennamen als Schlüssel erstellen, jedoch ohne Werte/Daten aus der Datenbank), dann wird das Array NICHT empty()
sein.
In diesem Fall können Sie das Array in einem foreach durchlaufen und überprüfen, ob jeder Schlüssel einen Wert hat. Dies ist eine gute Methode, wenn Sie sowieso durch das Array durchlaufen müssen, möglicherweise die Schlüssel überprüfen oder Daten bereinigen.
Es ist jedoch nicht die beste Methode, wenn Sie einfach nur wissen müssen, ob "Werte vorhanden sind" TRUE oder FALSE zurückgibt. Es gibt verschiedene Methoden, um festzustellen, ob ein Array Werte enthält, wenn bekannt ist, dass es Schlüssel hat. Eine Funktion oder Klasse könnte der beste Ansatz sein, aber wie immer hängt es von Ihrer Umgebung und Ihren genauen Anforderungen ab, sowie anderen Dingen wie dem, was Sie derzeit mit dem Array machen (falls überhaupt).
Hier ist ein Ansatz, der sehr wenig Code verwendet, um zu überprüfen, ob ein Array Werte enthält:
Verwendung von array_filter()
:
Es durchläuft jeden Wert im Array und übergibt sie an die Rückruffunktion. Wenn die Rückruffunktion true zurückgibt, wird der aktuelle Wert aus dem Array in das Ergebnisarray zurückgegeben. Array-Schlüssel werden beibehalten.
$EmptyTestArray = array_filter($ArrayOne);
if (!empty($EmptyTestArray))
{
// Tests an den Werten in $ArrayOne durchführen
}
else
{
// Wahrscheinlich kein else benötigt
// könnte jedoch eine Nachricht an den Benutzer zurückgeben wie "du hast nichts eingegeben" usw.
}
Wenn Sie array_filter()
auf alle drei Beispielsarrays ausführen (die im ersten Codeblock dieser Antwort erstellt wurden), erhalten Sie Folgendes:
ARRAY EINS:
$arrayone ist nicht leer
ARRAY ZWEI:
$arraytwo ist nicht leer
ARRAY DREI:
$arraythree ist leer
Wenn es also keine Werte gibt, unabhängig davon, ob Schlüssel vorhanden sind oder nicht, zeigt die Verwendung von array_filter()
zum Erstellen eines neuen Arrays und dann die Überprüfung, ob das neue Array leer ist, an, ob es Werte im Originalarray gab.
Es ist nicht ideal und etwas unübersichtlich, aber wenn Sie ein riesiges Array haben und es aus keinem anderen Grund durchlaufen müssen, dann ist dies in Bezug auf den benötigten Code am einfachsten.
Ich habe keine Erfahrung mit der Überprüfung von Overheads, aber es wäre gut zu wissen, welche Unterschiede es zwischen der Verwendung von array_filter()
und der Verwendung von foreach
gibt, um zu überprüfen, ob ein Wert gefunden wird.
Natürlich müssten Benchmarks auf verschiedenen Parametern durchgeführt werden, bei kleinen und großen Arrays und wenn Werte vorhanden sind oder nicht usw.