Хотя ответ Fosco не является неправильным, есть случай, который нужно рассмотреть с этим: смешанные массивы. Представьте, что у меня есть такой массив:
$a = array(
"nice",
"car" => "fast",
"none"
);
Теперь PHP допускает такой синтаксис, но у него есть одна проблема: если я запускаю код Fosco, я получаю 0
неправильный код , но почему это происходит?
Потому что при выполнении сравнения между строками и целыми числами PHP преобразует строки в целые числа (и это, на мой взгляд, довольно глупо), поэтому при array_search()
поиске индекса он останавливается на первом, потому что, по-видимому, ("car" == 0)
это правда .
Установка array_search()
в строгий режим не решит проблему, потому что тогда array_search("0", array_keys($a))
вернет false, даже если элемент с индексом 0 существует.
Таким образом, мое решение просто конвертирует все индексы из array_keys()
в строки и затем сравнивает их правильно:
echo array_search("car", array_map("strval", array_keys($a)));
Печатает 1
, что правильно.
РЕДАКТИРОВАТЬ:
Как Shaun указал в комментарии ниже, то же самое относится и к значению индекса, если вам случится искать int индекс, как это:
$a = array(
"foo" => "bar",
"nice",
"car" => "fast",
"none"
);
$ind = 0;
echo array_search($ind, array_map("strval", array_keys($a)));
Вы всегда получите 0
, что неверно, поэтому решением будет привести индекс (если вы используете переменную) к строке, подобной этой:
$ind = 0;
echo array_search((string)$ind, array_map("strval", array_keys($a)));