Почему array_search не распознает первый элемент в массиве?

#php #arrays

#php #массивы

Вопрос:

Я в замешательстве. Почему array_search пропускает первый элемент в массиве? in_array возвращает только логические значения, array_search может возвращать любые значения — это из-за этого? На данный момент это не имеет для меня никакого смысла. Пример кода ниже:

 lt;?php  $array = array("Mac", "NT", "Linux");  if (in_array("Mac", $array)) {  echo "Ok n"; } else {  echo "Not ok n"; } // output: Ok  if (array_search("Mac", $array)){  echo "Ok n"; } else {  echo "Not ok n"; } // output: Not Ok  $arrayForArraySearch = array('', "Mac", "NT", "Linux"); // add first element  if (array_search("Mac", $arrayForArraySearch)){  echo "Ok n"; } else {  echo "Not ok n"; } // output: Ok, but it's no longer first item ?gt;  

Комментарии:

1. array_search() возвращает ключ в случае успеха — т. е. 0 для «Mac», что переводится false как , поэтому вы входите в else {...} блок.

2. @berend Введите это как ответ, чтобы его можно было пометить.

Ответ №1:

Это потому, что array_search возвращает 0 индекс «Mac» в массиве. Если элемент не найден в массиве, он вернется false .

Всегда сравнивайте результат с ложным:

 if (array_search("Mac", $array) !== false) { ... }  

Ответ №2:

Как указано в документах функции array_search, возвращается ключ найденного элемента. С вашим условием if это приводит к ложному значению, потому что ключ вашего элемента «Mac» является 0 .

Измените свое условие, чтобы оно соответствовало не ложному =gt; if (array_search("Mac", $array) !== false)