2011-10-06 2 views
12

Для этого массива ($options):in_array() не работает, как ожидалось

Array (
    [0] => 0 
    [1] => 1 
    [2] => 2 
) 

PHP возвращает значение TRUE:

$this->assertTrue(in_array('Bug', $options));   // TRUE 
$this->assertTrue(in_array('Feature', $options));  // TRUE 
$this->assertTrue(in_array('Task', $options));  // TRUE 
$this->assertTrue(in_array('RockAndRoll', $options)); // TRUE 

Почему?

+0

@alex Похоже, PHPUnit. – Phil

+0

@Phil: О, да, подумал, удалил его, прежде чем я увидел ваш ответ. – alex

ответ

24

Это потому, что 0 == "string" is true и 0 - это элемент массива.

Установите параметр $strict в in_array к истине:

$this->assertTrue(in_array('Bug', $options, true)); 
6

Попробуйте добавить третий параметр к своим функциональным вызовам;

$this->assertTrue(in_array('Bug', $options, true)); 

Это гарантирует, что сравнения строгие и должны решить вашу проблему.

2

Добавьте третий аргумент in_array() и установить его на TRUE.

Смежные вопросы