глюк с in_array?

alexey84

phplancer
глюк с in_array?

есть такой скрипт
$parent=array
(
"index"=>0,
"benefits"=>84,
"airline"=>58,
"about"=>25,
"news"=>17,
"spec"=>8,
"country"=>33,
"tarifs"=>72
);
if(in_array("search",$parent)) echo "true";
хотя в массиве нет значения search он всеравно выводит true
в чем проблема?
 

alexey84

phplancer
if(isset($parent['search'])) echo "true";
вот так все заработало верно, спасибо
 

Wicked

Новичок
alexey84
jfyi:
PHP:
$a = array("b" => null);
var_dump(isset($a["b"])); // false
var_dump(array_key_exists("b", $a)); // true
 

hermit_refined

Отшельник
практически во всех случаях, когда надо проверить присутствие ключа в массиве, можно быть уверенным, что значения null в нем нет.
потому использование array_key_exists - пессимизация по сравнению с isset, являющейся конструкцией языка.

(о читабельности уж и не говорю.)
 

Observer

Новичок
hermit_refined
Не совсем согласна.
Для рядовых случаев это может быть и так, но для библиотек (работа с деревьями, например) лучше использовать array_key_exists, поскольку это может устранить появление трудноуловимых ошибок.
 

dark-demon

d(^-^)b
hermit_refined, практически во всех случаях, когда надо проверить присутствие ключа в массиве, можно быть уверенным, что значения null, "", 0, NaN, INF и Array() в нем нет. :) в таком случае вообще юзаем !empty...
если же нас интересует только наличие ключа, не зависимо от его значения, то юзаем array_key_exists
 
Сверху