Einige gute Antworten, aber ich dachte, ich erkläre ein wenig, um klarer zu erklären, wann PHP feststellt, ob ein Array leer ist.
Wichtigste Anmerkungen:
Ein Array mit einem Schlüssel (oder Schlüsseln) wird bestimmt als NICHT leer mit PHP.
Da Array-Werte Schlüssel benötigen, um existieren zu können, bestimmt das Vorhandensein von Werten in einem Array nicht, ob es leer ist oder nicht, sondern nur, ob es keine Schlüssel (und damit keine Werte) gibt.
Das Überprüfen eines Arrays mit empty()
sagt Ihnen nicht nur, ob Sie Werte haben oder nicht, sondern auch, ob das Array leer ist und die Schlüssel Teil eines Arrays sind.
Überlegen Sie also, wie Sie Ihr Array erstellen, bevor Sie sich für eine Prüfmethode entscheiden.
EG Ein Array wird Schlüssel haben, wenn ein Benutzer Ihr HTML-Formular absendet, wenn jedes Formularfeld einen Array-Namen hat (d.h. name="array[]"
).
A nicht leer Array wird für jedes Feld erzeugt, da es automatisch inkrementierte Schlüsselwerte für das Array jedes Formularfeldes geben wird.
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 als Echo ausgeben, erhalten Sie Folgendes:
ARRAY ONE:
[UserKeyA] => [UserValueA]
[UserKeyB] => [UserValueB]
ARRAY TWO:
[0] => [UserValue01]
[1] => [UserValue02]
ARRAY THREE:
[0] => []
[1] => []
Und das Testen der oben genannten Arrays mit empty()
liefert die folgenden Ergebnisse:
ARRAY ONE:
$ArrayOne ist nicht leer
ARRAY TWO:
$ArrayTwo ist nicht leer
ARRAY THREE:
$ArrayThree ist nicht leer
Ein Array wird immer leer sein, wenn Sie ein Array zuweisen, es aber danach nicht mehr verwenden, z. B:
$ArrayFour = array();
Dieser wird leer sein, d.h. PHP gibt TRUE zurück, wenn if empty()
zu den oben genannten Punkten.
Wenn Ihr Array also Schlüssel hat - entweder durch z.B. die Eingabenamen eines Formulars oder wenn Sie sie manuell zuweisen (d.h. ein Array mit Datenbankspaltennamen als Schlüssel, aber keine Werte/Daten aus der Datenbank erstellen), dann wird das Array NICHT empty()
.
In diesem Fall können Sie das Array in einer foreach-Schleife durchlaufen und prüfen, ob jeder Schlüssel einen Wert hat. Dies ist eine gute Methode, wenn Sie das Array ohnehin durchlaufen müssen, um vielleicht die Schlüssel zu überprüfen oder Daten zu bereinigen.
Es ist jedoch nicht die beste Methode, wenn Sie einfach nur wissen wollen, ob Werte vorhanden sind". WAHR ou FALSCH . Es gibt verschiedene Methoden, um festzustellen, ob ein Array Werte hat, 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 den genauen Anforderungen ab, sowie von anderen Dingen, wie z.B. was Sie derzeit mit dem Array machen (wenn überhaupt).
Hier ist ein Ansatz, der sehr wenig Code benötigt, um zu prüfen, ob ein Array Werte hat:
使用方法 array_filter()
:
Iteriert über jeden Wert im Array und übergibt ihn an die Callback-Funktion. Wenn die Callback-Funktion true zurückgibt, wird der aktuelle Wert aus dem Array in das Ergebnis-Array zurückgegeben. Array-Schlüssel werden beibehalten.
$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
}
Laufen array_filter()
auf alle drei Beispielarrays (die im ersten Codeblock dieser Antwort erstellt wurden) führt zu folgendem Ergebnis:
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 es Schlüssel gibt oder nicht, kann mit array_filter()
um ein neues Array zu erstellen und dann zu prüfen, ob das neue Array leer ist, zeigt an, ob es irgendwelche Werte im ursprünglichen Array gab.
Es ist nicht ideal und ein bisschen chaotisch, aber wenn Sie ein großes Array haben und es nicht aus anderen Gründen in einer Schleife durchlaufen müssen, dann ist dies der einfachste Code, der benötigt wird.
Ich habe keine Erfahrung mit der Überprüfung von Gemeinkosten, aber es wäre gut zu wissen, welche Unterschiede es zwischen der Verwendung von array_filter()
et foreach
Prüfung, ob ein Wert gefunden wird.
Offensichtlich müsste der Benchmark auf verschiedene Parameter, auf kleine und große Arrays und wenn es Werte und nicht usw. sein.