#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)