2013-03-10 48 views
14

<?= count(false) ?> neden 1 döndürdüğünü biliyor musunuz? false ÇünküNeden (yanlış) geri dönüş 1 sayılır?

+0

olası bir kopyası [yanlış sayım sayısı 1'dir ve boş bir diziden oluşursa yanlış verilir. neden?] (http://stackoverflow.com/questions/3776882/count-of-false-gives-1-and-if-of-an-empty-array-gives-false-why) – mario

cevap

22

Belirtilen davranışı:

var bir dizi ya da uygulanan Sayılabilir arayüzü ile bir amacı, değilse, 1 döndürülür. PHP bir eleman, bir dizi veya bir nesne olup olmadığını belirlemek için count() kullanmasını birini engelliyor gibi

http://php.net/manual/en/function.count.php

+3

... beni 5 saniye içinde yendiniz, bu yüzden size +1 – Daedalus

+0

vereceğim sayımdan 0 elde edersiniz eğer bir dizi yoksa ?? – Ritesh

+0

@Ritesh '$ count = $ var! = False? saymak ($ ​​var): 0; '? – aesede

8

aynı zamanda bir değerdir ve sayım() dizi ama geçerli bir değişken almazsa o 1 olduğunu true döndürür.

$result = count(null); 
// $result == 0 

$result = count(false); 
// $result == 1 
+1

"Rastgele" yorum: nasıl (0) false değerini döndürürse ve (-1) true değerini döndürürse böyle olur. –

+0

Kapa çeneni: 'true' döndürmez. "say" bir dizi beklemektedir ve eğer "var" bir değilse, bir diziye dökülür. 'False' geçerli bir değer olduğundan, bir öğe ile bir diziye dökülür: 'false' değerine sahip bir öğe. http://justinsomnia.org/2007/12/in-php-countfalse-returns-1/ –

1

göre bana görünüyor. Bunun için özel işlevler vardır (is_array(), is_object()) ve count()'u saf olarak kullanmak ve dizi veya nesneyi belirlemek için false koşulunu kontrol etmek cazip gelebilir. Bunun yerine, PHP nesneler olmayan, olmayan diziler 1 (gerçektir) döndürür, böylece bu yöntem bu şekilde saf olarak kullanılamaz (çünkü 0 boş bir dizi/nesne için geçerli, hatalı bir sonuçtur).

Bu, açıkladığınız durumdaki işlev tarafından döndürülen değer seçiminin arkasındaki neden olabilir.

+0

Bir dizi veya nesne olup olmadığını belirlemeye çalışmaz, dizinin uzunluğunu belirlemeye ve 0 kayıt veya var olmayan bir dizinin neden hala geri döneceğini sorgulamaya çalışıyor. – jerebear

1

kafanızda bu hatırlamak için güzel bir yolu:

  • sayımı (yanlış) temelde aynıdır:
  • sayımı ("tek boolean") ve bu nedenle "TEK" mantıksal ifadenin olarak vardır sonuç.
İlgili konular