PHP'nin in_array'in fonksiyonu ile garip davranış

2 Cevap php

Birden fazla form öğeleri denetler ve geçirilen çek veya çalıştırıldı çek ismi geçemedi if boolean (true) ya döndüren bir işlevi var. Bir seferde birden fazla denetimlerini çalıştırmak için işlevi inşa, bu nedenle (çalıştırıldığı her kontrol için bir sonuç) bu sonuç bir dizi döndürür. Ben işlevini çalıştırdığınızda, ben bu dizi sonuç almak:

Array ( [0] => 1 [1] => password [2] => birthday ) // print_r
array(3) { [0]=>  bool(true) [1]=>  string(8) "password" [2]=>  string(8) "birthday" } // var_dump

'Username' geçti onay ve 'şifre' ve 'doğum günü' hem başarısız denetler. Sonra şöyle, olanları başarısız belirlemek için basit in_array ifadeleri kullanıyorum:

$results = $ani->e->vld->simulate("register.php", $checks);
die(var_dump($results)); // Added after to see what array was being returned
if (in_array("username", $results)) // do something
if (in_array("password", $results)) // do something
if (in_array("birthday", $results)) // do something

Ben yaşıyorum sorun 'username' hattı hala bile bu 'username' dizide değil, yürütme olmasıdır. Onlar nedense hepsi doğru sanki üç ifadeleri yürütür. Neden bu? Ben bool (true) otomatik fonksiyon dizinin kalanını kontrol etmeden, her bir sonuç için doğru dönmek neden olduğunu düşündüm, ama bu çok garip özelliğe öneririm herhangi bir belge bulamadı.

2 Cevap

Siz haklısınız. "username" == true in_array() dönmek için neden, true değerlendirir true. strict bayrağı kullanın. Bu fonksiyon false değerlendirir ki, "username" === true kullanmasına neden olur. Boş olmadıkça PHP, bir dize true olduğunu. Ve === operatör kontrol değerine ilaveten yazın.

Haklısınız, boolean aslında bu neden olabilir. in_array function, this way also the type, elemanın kontrol edilir olarak strict bayrağını (kullanarak olarak temelde aynı ===):

if (in_array("username", $results, true)) // do something
if (in_array("password", $results, true)) // do something
if (in_array("birthday", $results, true)) // do something