Ваш код не полный, и я не могу воспроизвести ошибку.
Позвольте мне настроить ваш пример:
<?
$item = array('value' => 1);
$allowed_values = array(0 => 'no',1 => 'yes');
echo "needle:";
var_dump($item['value']);
echo "haystack:";
var_dump($allowed_values);
if (count($allowed_values) && !array_key_exists($item['value'], $allowed_values)) {
echo "needle hast not been found or haystack is empty\n";
} else {
echo "needle has been found\n";
}
дает желаемый результат:
needle:int(1)
haystack:array(2) {
[0]=>
string(2) "no"
[1]=>
string(3) "yes"
}
needle has been found
PHP также работает, когда вы назначаете игле строку, а не целое число.Это своего рода преобразование типа с потерями, которое может быть действительно удобным, но также и боль в заднице.Часто вы не знаете, что происходит, и возникают ошибки.
Но все же.Могу поспорить, у вас что-то не так с вашими типами переменных.
Вы должны выбросить их и посмотреть, что там на самом деле.