Незважаючи на те, що відповідь Фоско не є помилковою, слід враховувати такий випадок : змішані масиви. Уявіть, у мене такий масив:
$a = array(
"nice",
"car" => "fast",
"none"
);
Тепер PHP дозволяє такий синтаксис, але у нього є одна проблема: якщо я запускаю код Fosco, я отримую, 0
що для мене неправильно , але чому це відбувається?
Тому що при порівнянні між рядками та цілими числами PHP перетворює рядки в цілі числа (а це на мою думку начебто дурне), тож при array_search()
пошуку індексу він зупиняється на першому, оскільки, мабуть, ("car" == 0)
це правда .
Якщо встановити array_search()
строгий режим, це не вирішить проблему, оскільки тоді array_search("0", array_keys($a))
повернеться помилковим, навіть якщо існує елемент з індексом 0.
Тож моє рішення просто перетворює всі індекси з array_keys()
рядків і потім правильно їх порівнює:
echo array_search("car", array_map("strval", array_keys($a)));
Друкує 1
, що правильно.
EDIT:
Як вказував Шаун у коментарі нижче, те саме стосується значення індексу, якщо вам трапляється шукати такий індекс, як цей:
$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)));