PHP - pobierz nazwę klucza wartości tablicy

157

Mam tablicę w następujący sposób:

function example() {
    /* some stuff here that pushes items with
        dynamically created key strings into an array */

    return array( // now lets pretend it returns the created array
        'firstStringName' => $whatEver,
        'secondStringName' => $somethingElse
    );
}

$arr = example();

// now I know that $arr contains $arr['firstStringName'];

Muszę znaleźć indeks, $arr['firstStringName']aby móc przechodzić przez pętlę array_keys($arr)i zwracać ciąg klucza 'firstStringName'według jego indeksu. Jak mogę to zrobić?

headacheCoder
źródło
Czy możesz rozwinąć przypadek użycia tego, co próbujesz osiągnąć?
nikc.org

Odpowiedzi:

332

Jeśli masz wartość i chcesz znaleźć klucz, użyj w array_search()ten sposób:

$arr = array ('first' => 'a', 'second' => 'b', );
$key = array_search ('a', $arr);

$keybędzie teraz zawierać klucz dla wartości 'a'(czyli 'first').

zrvan
źródło
21
array_filter()może zostać użyty, jeśli chcesz zwrócić wszystkie pasujące wyniki zamiast tylko pierwszego pasującego, ponieważ zachowuje klucze.
Mike Lyons
5
Myślę, że warto tu zwrócić uwagę: to rozwiązanie nie działało, dopóki nie odkryłem, że sortowanie tablicy (sort ($ arr)) usuwa nazwy kluczy i odwołuje się do domyślnych wartości indeksu 0,1,2 itd. Jeśli więc sortujesz, użyj asort (asort ($ arr)). Pozwala to zachować kluczowe wartości. php.net/manual/en/function.asort.php
Rich701
63
key($arr);

zwróci wartość klucza dla bieżącego elementu tablicy

http://uk.php.net/manual/en/function.key.php

Mark Baker
źródło
@AnthonyRutledge Zwróci tylko to, na co aktualnie „wskazuje” wewnętrzny wskaźnik. Jeśli potrzebujemy innego odniesienia, powinniśmy użyć metody zrvans, która dokładnie wyszukuje żądaną wartość.
Parapluie
18

Jeśli nazwa jest dynamiczna, musisz mieć coś takiego

$arr[$key]

co oznaczałoby, że $ klucz zawiera wartość klucza.

Możesz użyć, array_keys()aby uzyskać WSZYSTKIE klucze tablicy, np

$arr = array('a' => 'b', 'c' => 'd')
$x = array_keys($arr);

dałby ci

$x = array(0 => 'a', 1 => 'c');
Marc B.
źródło
16

Tak, rzeczywiście, php jest jednym z niewielu języków, które zapewniają takie wsparcie.

foreach($arr as $key=>$value)
{

}
Rajat Singhal
źródło
To nie jest trafna odpowiedź jak na wyszukiwanie i bardziej czasochłonna. Mniej efektywne kodowanie
Rishab
13

jeśli chcesz zwrócić elementy tablicy o tej samej wartości, użyj array_keys()funkcji function

$array = array('red' => 1, 'blue' => 1, 'green' => 2);
print_r(array_keys($array, 1));
aiswarya
źródło
11

Oto inna opcja

$array = [1=>'one', 2=>'two', 3=>'there'];
$array = array_flip($array);
echo $array['one']; 
Demissew
źródło
8

użyj, array_keys()aby uzyskać tablicę wszystkich unikalnych kluczy.

Zauważ, że tablica z nazwanymi kluczami, takimi jak twój, $arrmoże być również dostępna za pomocą indeksów numerycznych, takich jak $arr[0].

http://php.net/manual/en/function.array-keys.php

sty
źródło
4

możesz użyć kluczowej funkcji php, aby uzyskać nazwę klucza:

<?php
    $array = array(
    'fruit1' => 'apple',
    'fruit2' => 'orange',
    'fruit3' => 'grape',
    'fruit4' => 'apple',
    'fruit5' => 'apple');

    // this cycle echoes all associative array
    // key where value equals "apple"
    while ($fruit_name = current($array)) {
      if ($fruit_name == 'apple') {
        echo key($array).'<br />';
      }
    next($array);
     }
?>

jak tutaj: PHP: klucz - Instrukcja

rtroulak
źródło