Bazı iyi cevaplar, ama sadece PHP bir dizi boş olup olmadığını belirlediğinde daha net açıklamak için biraz genişletmek düşündüm.
Ana Notlar:
Anahtarlı (veya anahtarlı) bir dizi PHP tarafından boş DEĞİL olarak belirlenir .
Dizi değerleri anahtarlara ihtiyaç duyduğundan, bir dizide değerlere sahip olmak ya da olmamak, yalnızca anahtar yoksa (VE dolayısıyla değer yoksa) boş olup olmadığını belirlemez.
Bu nedenle, bir diziyi kontrol etmek empty()size değerleriniz olup olmadığını söylemez, dizinin boş olup olmadığını ve anahtarların bir dizinin parçası olup olmadığını söyler.
Hangi kontrol yöntemini kullanacağınıza karar vermeden önce dizinizi nasıl ürettiğinizi düşünün.
EG Her form alanı bir dizi adına (ör. ) Sahip olduğunda, kullanıcı HTML formunuzu gönderdiğinde bir dizi anahtarlara sahip olacaktırname="array[]" .
Bir boş olmayan bir otomatik her form alanının dizisi için anahtar değerleri artırılır olacak şekilde dizisi, her bir alan için üretilecektir.
Örneğin bu dizileri ele alalım:
/* 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[] = '';
Yukarıdaki diziler için dizi anahtarlarını ve değerleri yankılarsanız, aşağıdakileri elde edersiniz:
BİR ARRAY:
[UserKeyA] => [UserValueA]
[UserKeyB] => [UserValueB]
İKİNCİ
Dizi : [0] => [UserValue01]
[1] => [UserValue02]
ÜÇÜNCÜ Dizi:
[0] => []
[1] => []
Ve yukarıdaki dizileri test etmek empty()aşağıdaki sonuçları döndürür:
BİR
DÜZEN : $ ArrayOne boş değil
İKİ İKİ:
$ ArrayTwo boş değil
ÜÇÜNCÜ
DÜZEN : $ ArrayThree boş değil
Bir dizi atadığınızda bir dizi her zaman boş olur, ancak bundan sonra onu kullanmazsınız, örneğin:
$ArrayFour = array();
Bu boş olacak, yani empty()yukarıdaki durumlarda kullanılırken PHP TRUE döndürecektir .
Dolayısıyla dizinizde anahtarlar varsa - örneğin bir formun giriş adlarıyla veya bunları manuel olarak atarsanız (örn. Anahtar olarak veritabanı sütun adlarıyla bir dizi oluşturun ancak veritabanından değer / veri yok), dizi DEĞİLDİR empty().
Bu durumda, dizinin bir foreach içinde döngüye girip her anahtarın bir değeri olup olmadığını test edebilirsiniz. Yine de dizi üzerinden çalışmanız, belki de anahtarları kontrol etmeniz veya verileri sterilize etmeniz gerekiyorsa, bu iyi bir yöntemdir.
Ancak, "değerlerin olup olmadığını" DOĞRU veya YANLIŞ döndürdüğünü bilmeniz gerekiyorsa en iyi yöntem değildir . Bir dizinin anahtarları olacağını bildiğinde herhangi bir değere sahip olup olmadığını belirlemek için çeşitli yöntemler vardır. Bir işlev veya sınıf en iyi yaklaşım olabilir, ancak her zaman olduğu gibi ortamınıza ve kesin gereksinimlerin yanı sıra şu anda dizi ile ne yaptığınız gibi başka şeylere (herhangi bir şey varsa) bağlıdır.
İşte bir dizinin değerleri olup olmadığını kontrol etmek için çok az kod kullanan bir yaklaşım:
Kullanım array_filter():
Dizideki her bir değeri geri arama işlevine geçirerek yineler. Geri arama işlevi true değerini döndürürse, dizideki geçerli değer sonuç dizisine döndürülür. Dizi anahtarları korunur.
$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
}
Koşu array_filter()(bu yanıtında ilk kod bloğu oluşturulan) aşağıda sonuçları her üç örnek diziler üzerinde:
BİR
DÜZEN : $ arrayone boş değil
İKİ İKİ:
$ arraytwo boş değil
ÜÇÜNCÜ
Dizi : $ arraythree boş
Bu nedenle, herhangi bir değer olmadığında, anahtarlar olsun veya olmasın, array_filter()yeni bir dizi oluşturmak için kullanın ve sonra yeni dizinin boş olup olmadığını kontrol edin, orijinal dizide herhangi bir değer olup olmadığını gösterir.
İdeal ve biraz dağınık değil, ancak büyük bir diziniz varsa ve başka bir nedenden dolayı döngü yapmanıza gerek yoksa, bu gerekli kod açısından en basit olanıdır.
Genel giderlerin kontrolünde deneyimli değilim, ancak bir değerin bulunup bulunmadığını kontrol etmek array_filter()ve kullanmak arasındaki farkları bilmek iyi olurdu foreach.
Açıkçası, karşılaştırmanın çeşitli parametrelerde, küçük ve büyük dizilerde ve değerler olduğunda vb.