Chociaż odpowiedź Fosco nie jest błędna, należy rozważyć przypadek z tym: tablice mieszane. Wyobraź sobie, że mam taką tablicę:
$a = array(
"nice",
"car" => "fast",
"none"
);
Otóż, PHP pozwala na taką składnię, ale ma jeden problem: jeśli uruchamiam kod Fosco, otrzymuję 0
nieprawidłowy dla mnie kod , ale dlaczego tak się dzieje?
Ponieważ podczas porównywania ciągów znaków i liczb całkowitych PHP konwertuje ciągi znaków na liczby całkowite (i moim zdaniem jest to trochę głupie), więc podczas array_search()
wyszukiwania indeksu zatrzymuje się na pierwszym, ponieważ najwyraźniej ("car" == 0)
jest prawdziwy .
Ustawienie array_search()
trybu ścisłego nie rozwiąże problemu, ponieważ wtedy array_search("0", array_keys($a))
zwróci wartość false, nawet jeśli istnieje element o indeksie 0.
Więc moje rozwiązanie po prostu konwertuje wszystkie indeksy z array_keys()
na ciągi, a następnie porównuje je poprawnie:
echo array_search("car", array_map("strval", array_keys($a)));
Wydruki 1
, co jest poprawne.
EDYCJA:
Jak zauważył Shaun w poniższym komentarzu, to samo dotyczy wartości indeksu, jeśli zdarzy się, że szukasz indeksu int w następujący sposób:
$a = array(
"foo" => "bar",
"nice",
"car" => "fast",
"none"
);
$ind = 0;
echo array_search($ind, array_map("strval", array_keys($a)));
Zawsze otrzymasz 0
, co jest błędne, więc rozwiązaniem byłoby rzutowanie indeksu (jeśli używasz zmiennej) na ciąg podobny do tego:
$ind = 0;
echo array_search((string)$ind, array_map("strval", array_keys($a)));