Boş diziler için denetleniyor: boş vs saymak

8 Cevap php

'How to tell if a PHP array is empty' Bana bu sorunun düşünce vardı bu soru

Bir dizi boş olup olmadığını belirlerken count empty yerine kullanılması gerektiğini bir nedeni var mı?

2 empty kullanmalısınız boş dizilerin durum için eşdeğer eğer bir boolean soruya mantıksal bir cevap verir, çünkü benim kişisel düşünce olacaktır. Yukarıda bağlantılı soru, bu count($var) == 0 popüler yöntem gibi görünüyor. Benim için, teknik açıdan doğru ise, hiçbir mantıklı. Örneğin Q: $var, are you empty? A: 7. Hmmm ...

Ben kişisel zevk meselesi count == 0 yerine ya da sadece kullanmanız gereken bir nedeni var mı?

Bir anda silinmiş cevap açıklamalarda başkaları tarafından işaret ettiği gibi bütün elemanları saymak zorunda çünkü empty en kısa sürede o kadar durduramaz ise, count, büyük diziler için performans etkileri olacaktır boş olmadığını bilir. Bu durumda aynı sonuçları verir, ancak count potansiyel verimsiz Yani, neden biz hiç kullanmak istiyorsunuz count($var) == 0?

8 Cevap

Ben genellikle kullanmak empty. Im değil emin niçin insanlar gerçekten sayılmasını kullanmak - dizi büyükse o sayımı uzun sürer / daha fazla yük vardır. Sadece dizi boş olup olmadığını bilmeniz gerekir o zaman boş kullanın.

Ben sadece kişisel tercihi olduğunu düşünüyorum. Bazı insanlar empty daha hızlı olduğunu söylüyorlar (örneğin http://jamessocol.com/projects/count_vs_empty.php), diğerleri özgün diziler için yapılmış bu yana count daha iyi olduğunu söyleyebiliriz iken. Olabilir empty daha geneldir ve diğer türlerine uygulanabilir.

php.net için aşağıdaki uyarıyı verir count olsa:

() ayarlanmamış bir değişken için 0 döndürebilir sayılır, ama aynı zamanda boş bir dizi ile başlatılmış olan bir değişken için 0 döndürebilir. Bir değişken tanımlı olup olmadığını isset () kullanın.

Değişkeni ayarlı değilse, diğer bir deyişle, bunu tanımsız söylüyorsunuz PHP bir haber alacaksınız. Bu nedenle, count kullanmadan önce, bu isset ile değişkeni kontrol etmek tercih olacaktır. Bu empty ile gerekli değildir.

Bir dizi boş olup olmadığını belirlerken bu sayısı boş yerine kullanılması gereken bir nedeni var mı?

Eğer boyutunu bilerek boş olmayan dizi üzerinde bir şeyler yapmak gerektiğinde, var:

if( 0 < ( $cnt = count($array) ) )
{
 echo "Your array size is: $cnt";
}
else
 echo "Too bad, your array is empty :(";

% 100 emin olmadıkça Ama ne sayıyorsun bir dizi olduğunu, sayısı kullanmanızı tavsiye etmem. FALSE yerine boş dizi dönen ve ne ben keşfettim oldu nerede hata işlev Son zamanlarda ben, kod hata ayıklama edilmiştir:

var_dump(count(FALSE));

çıktı:

int 1

Bu yüzden o günden beri ben kullanıyorum empty veya if(array() === $array) I array bu boş olduğundan emin olmak için.

Alternatif olarak, bir boolean (örtülü veya açık) olarak değişken çevirebilirsiniz:

if( $value )
{
  // array is not empty
}

if( (bool) $value )
{
  // array is still not empty
}

Bu yöntem, bir E_NOTICE değişkeni tanımlı değilse, benzer için count() oluşturmak yapar.

Daha fazla bilgi için, bkz: the PHP Manual page on type comparisons.

Benim kişisel tercihi (benim özel kullanım-davayla ilgili olarak) zarafeti kodlama için daha fazladır. I () 'if' deyimi doldurmak için daha fazla kod yazmak için geliştirici zorlayarak söz testi için (bu durumda mantıksal olarak) doğru veri türü ile yanıt olmadığını sayımı mademki Dan McG ile katılıyorum.

Bu performansı üzerinde önemli bir etkisi olup olmadığını (muhtemelen çoğu kurulumları için zaten yeterli bellek tahsisini olmayacak olan) son derece büyük diziler için sadece tartışmalıdır.

Bu PHP'nin $ _POST dizi gelince Özellikle, yazmak için benim görüşüme göre "mantıklı" çok fazla görünüyor / bakın:

if ( !empty ( $_POST ) ) {
    // deal with postdata
}

count($myArray) == 0 empty($myArray) üzerinde tercih için güçlü bir neden yoktur. Bunlar aynı anlama sahiptirler. Bazı diğerinden daha fazla okunabilir bulabilirsiniz. Bir diğerinden daha marjinal daha iyi performans olabilir ama php uygulamalarının büyük çoğunluğu önemli bir faktör olması muhtemel değil. Bütün pratik amaçlar için, tat seçim meselesidir.

Ben, teşekkürler zihnim çocuklar remade.

Tamam, empty kullanımı ve count arasında hiçbir fark yoktur. Teknik olarak, count diziler için kullanılmalıdır ve empty dizileri yanı sıra dizileri için kullanılabilir. Çoğu durumda, onlar değiştirilebilir ve php dokümanları görmek eğer tersi empty altındadır ve eğer, sen count in öneri listesini göreceksiniz.

Bazen boş kullanarak bir zorunluluktur. Bu kod örneği için:

$myarray = array();

echo "myarray:"; var_dump($myarray); echo "<br>";
echo "case1 count: ".count($myarray)."<br>";
echo "case1 empty: ".empty($myarray)."<br>";

$glob = glob('sdfsdfdsf.txt');

echo "glob:"; var_dump($glob); echo "<br>";
echo "case2 count: ".count($glob)."<br>";
echo "case2 empty: ".empty($glob);

Böyle bu kodu çalıştırın: http://phpfiddle.org/main/code/g9x-uwi

Bu çıktıyı almak:

myarray:array(0) { } 
case1 count: 0
case1 empty: 1

glob:bool(false) 
case2 count: 1
case2 empty: 1

Yani count boş glob çıktı yanlış çıktı alırsanız. Sen boşluk için kontrol etmelisiniz.

glob belgeleri:

Returns an array containing the matched files/directories, an empty array if no file matched or FALSE on error.
Note: On some systems it is impossible to distinguish between empty match and an error.

Also check this question: Why count(false) return 1?