Mam tablicę asocjacyjną i muszę znaleźć numeryczną pozycję klucza. Mógłbym ręcznie przejrzeć tablicę, aby ją znaleźć, ale czy istnieje lepszy sposób wbudowania w PHP?
$a = array(
'blue' => 'nice',
'car' => 'fast',
'number' => 'none'
);
// echo (find numeric index of $a['car']); // output: 1
array("val1", "val2", "car" => "val3")
0
http://php.net/manual/en/function.array-keys.php
źródło
źródło
źródło
Chociaż odpowiedź Fosco nie jest błędna, należy rozważyć przypadek z tym: tablice mieszane. Wyobraź sobie, że mam taką tablicę:
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ż wtedyarray_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: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:
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:źródło
var_dump(array_search(0, array_map("strval", array_keys($a))));
zawsze wyświetliint (0)
zamiastbool (false)
.rozwiązanie, które wymyśliłem ... prawdopodobnie mało wydajne w porównaniu z rozwiązaniem Fosco:
źródło
array_search
, które wykonuje najpierw sortowanie, więc boleśnie powolne.Wszystkie rozwiązania oparte na array_keys nie działają dla tablic mieszanych. Rozwiązanie jest proste:
Z php.net: Jeśli trzeci parametr ścisły jest ustawiony na TRUE, funkcja array_search () wyszuka identyczne elementy w stogu siana. Oznacza to, że przeprowadzi również ścisłe porównanie typu igły w stogu siana, a obiekty muszą być w tej samej instancji.
źródło