2011-09-18 13 views
27

Ok, więc potrzebuję chwycić pozycję "bla" w tej tablicy (pozycja nie zawsze będzie taka sama). Na przykład:Jak uzyskać pozycję klucza w tablicy

$array = (
    'a' => $some_content, 
    'b' => $more_content, 
    'c' => array($content), 
    'blah' => array($stuff), 
    'd' => $info, 
    'e' => $more_info, 
); 

Tak, chciałbym być w stanie powrócić liczbę gdzie klucz „bla” położony jest w obrębie tablicy. W tym scenariuszu powinien powrócić 3. Jak mogę to zrobić szybko? I bez wpływu na tablicę $ tablic w ogóle.

Odpowiedz

62
$i = array_search('blah', array_keys($array)); 
+0

Dziękuję bardzo. Myślę, że pierwotnie parametry zostały odwrócone, ale je naprawiłeś. Próbowałem w inny sposób i otrzymałem błąd. Ale teraz jest doskonały. Dzięki :) – SoLoGHoST

+0

Czasami odpowiedzi są tak oczywiste ... :) –

-3

użytkownika array_search (doc). Mianowicie, `$ index = array_search ('bla', $ array)

+3

Nie! Tak jak w dokumencie mówi: Przeszukuje tablicę dla podanej ** wartości **, a nie ** **, gdy użytkownik zapytał. –

0

$keys=array_keys($array); daje tablicę zawierającą klucze $array

So, array_search('blah', $keys); daje indeks blah w $keys i dlatego $array

3

Jeśli znasz klucz istnieje:

PHP 5.4 (Demo):

echo array_flip(array_keys($array))['blah']; 

PHP 5.3:

$keys = array_flip(array_keys($array)); 
echo $keys['blah']; 

Jeśli nie wiesz klucz istnieje, można sprawdzić z isset:

$keys = array_flip(array_keys($array)); 
echo isset($keys['blah']) ? $keys['blah'] : 'not found' ; 

To jest tylko jak array_search ale korzysta z mapą, który już istnieje wewnątrz dowolnej tablicy. Nie mogę powiedzieć, czy to naprawdę jest lepsze niż array_search, to może zależeć od scenariusza, więc po prostu inną alternatywę.

+0

Tak, wiem na pewno, że klucz zawsze będzie istnieć! W takim przypadku byłoby to szybciej niż przy użyciu 'array_search'? – SoLoGHoST

+0

Pozwól mi odpowiedzieć w ten sposób: Tak długo, jak 'array_flip' jest szybszy niż' array_search', to jest :). Samo wyszukiwanie klucza jest szybsze niż "array_search". – hakre

+0

Podoba mi się pomysł, ale array_search jest rzeczywiście szybszy, zgodnie z moimi testami (przynajmniej w PHP 5.3). –

Powiązane problemy