Einige anständige Antworten, aber ich dachte nur, ich würde etwas erweitern, um klarer zu erklären, wann PHP feststellt, ob ein Array leer ist.
Hauptnotizen:
Ein Array mit einem Schlüssel (oder Schlüsseln) wird von PHP als NICHT leer bestimmt .
Da für Array-Werte Schlüssel erforderlich sind, wird durch das Vorhandensein von Werten in einem Array nicht bestimmt, ob es leer ist oder nicht, nur wenn keine Schlüssel vorhanden sind (UND daher keine Werte).
empty()Wenn Sie also ein Array mit überprüfen, erfahren Sie nicht nur, ob Sie Werte haben oder nicht, sondern auch, ob das Array leer ist und Schlüssel Teil eines Arrays sind.
Überlegen Sie sich also, wie Sie Ihr Array erstellen, bevor Sie entscheiden, welche Überprüfungsmethode verwendet werden soll.
EG Ein Array wird Tasten haben , wenn ein Benutzer Ihres HTML - Formular sendet , wenn jedes Formularfeld einen Array - Namen (dh hat name="array[]"). Für jedes Feld wird
ein nicht leeres Array erstellt, da für das Array jedes Formularfelds automatisch inkrementierte Schlüsselwerte vorhanden sind.
Nehmen Sie zum Beispiel diese Arrays:
/* Assigning some arrays */
// Array with user defined key and value
$ArrayOne = array("UserKeyA" => "UserValueA", "UserKeyB" => "UserValueB");
// Array with auto increment key and user defined value
// as a form field would return with user input
$ArrayTwo[] = "UserValue01";
$ArrayTwo[] = "UserValue02";
// Array with auto incremented key and no value
// as a form field would return without user input
$ArrayThree[] = '';
$ArrayThree[] = '';
Wenn Sie die Array-Schlüssel und -Werte für die oben genannten Arrays wiedergeben, erhalten Sie Folgendes:
ARRAY ONE:
[UserKeyA] => [UserValueA]
[UserKeyB] => [UserValueB]
ARRAY TWO:
[0] => [UserValue01]
[1] => [UserValue02]
ARRAY DREI:
[0] => []
[1] => []
Wenn Sie die obigen Arrays mit testen, erhalten Sie empty()die folgenden Ergebnisse:
ARRAY ONE:
$ ArrayOne ist nicht leer
ARRAY TWO:
$ ArrayTwo ist nicht leer
ARRAY THREE:
$ ArrayThree ist nicht leer
Ein Array ist immer leer, wenn Sie ein Array zuweisen, es danach jedoch nicht mehr verwenden, z. B.:
$ArrayFour = array();
Dies ist leer, dh PHP gibt TRUE zurück, wenn es empty()oben verwendet wird.
Wenn Ihr Array also Schlüssel hat - entweder durch die Eingabenamen eines Formulars oder wenn Sie diese manuell zuweisen (dh ein Array mit Datenbankspaltennamen als Schlüssel, aber ohne Werte / Daten aus der Datenbank erstellen), ist das Array NICHT empty().
In diesem Fall können Sie das Array in einem foreach schleifen und testen, ob jeder Schlüssel einen Wert hat. Dies ist eine gute Methode, wenn Sie das Array trotzdem durchlaufen müssen, um möglicherweise die Schlüssel zu überprüfen oder Daten zu bereinigen.
Es ist jedoch nicht die beste Methode, wenn Sie nur wissen müssen, ob Werte vorhanden sind, die TRUE oder FALSE zurückgeben . Es gibt verschiedene Methoden, um festzustellen, ob ein Array Werte hat, wenn bekannt ist, dass es Schlüssel hat. Eine Funktion oder Klasse ist möglicherweise der beste Ansatz, hängt jedoch wie immer von Ihrer Umgebung und den genauen Anforderungen sowie von anderen Faktoren ab, z. B. davon, was Sie derzeit mit dem Array tun (falls vorhanden).
Hier ist ein Ansatz, bei dem nur sehr wenig Code verwendet wird, um zu überprüfen, ob ein Array Werte enthält:
Verwenden von array_filter():
Iteriert über jeden Wert im Array und übergibt ihn 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 bleiben erhalten.
$EmptyTestArray = array_filter($ArrayOne);
if (!empty($EmptyTestArray))
{
// do some tests on the values in $ArrayOne
}
else
{
// Likely not to need an else,
// but could return message to user "you entered nothing" etc etc
}
Das Ausführen array_filter()auf allen drei Beispielarrays (die im ersten Codeblock dieser Antwort erstellt wurden) führt zu folgenden Ergebnissen:
ARRAY ONE:
$ arrayone ist nicht leer
ARRAY TWO:
$ arraytwo ist nicht leer
ARRAY THREE:
$ arraythree ist leer
Wenn also keine Werte vorhanden sind, unabhängig davon, ob Schlüssel vorhanden sind oder nicht, wird array_filter()durch Erstellen eines neuen Arrays und Überprüfen, ob das neue Array leer ist, angezeigt, ob das ursprüngliche Array Werte enthält.
Es ist nicht ideal und ein bisschen chaotisch, aber wenn Sie ein riesiges Array haben und es aus keinem anderen Grund durchlaufen müssen, ist dies der einfachste Code.
Ich habe keine Erfahrung mit der Überprüfung von Overheads, aber es wäre gut, die Unterschiede zwischen der Verwendung array_filter()und der foreachÜberprüfung zu kennen , ob ein Wert gefunden wird.
Offensichtlich müsste der Benchmark auf verschiedenen Parametern liegen, auf kleinen und großen Arrays und wenn es Werte gibt und nicht usw.