PHP - Récupère le nom de la clé de la valeur du tableau

158

J'ai un tableau comme suit:

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'];

J'ai besoin de trouver l'index de $arr['firstStringName']pour que je puisse boucler array_keys($arr)et renvoyer la chaîne de clé 'firstStringName'par son index. Comment puis je faire ça?

mal de tête
la source
Pouvez-vous élaborer avec un cas d'utilisation de ce que vous essayez de réaliser?
nikc.org

Réponses:

333

Si vous avez une valeur et que vous voulez trouver la clé, utilisez array_search()comme ceci:

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

$keycontiendra désormais la clé de valeur 'a'(c'est-à-dire 'first').

zrvan
la source
21
array_filter()peut être utilisé si vous devez renvoyer tous les résultats correspondants au lieu du premier correspondant, car il préserve les clés.
Mike Lyons
5
Quelque chose que je pense intéressant de noter ici: cette solution ne fonctionnait pas pour moi, jusqu'à ce que je découvre que le tri du tableau (sort ($ arr)) supprime les noms de clé et recourt aux valeurs d'index par défaut 0,1,2, etc. Donc, si vous triez, utilisez asort (asort ($ arr)). Cela maintient les valeurs clés. php.net/manual/en/function.asort.php
Rich701
63
key($arr);

renverra la valeur de clé pour l'élément de tableau actuel

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

Mark Baker
la source
@AnthonyRutledge Cela ne retournera que ce sur quoi le pointeur interne est actuellement "pointé". Si nous avons besoin d'une autre référence, nous devrions utiliser la méthode zrvans, qui recherche spécifiquement la valeur demandée.
Parapluie
39

Si je comprends bien, ne pouvez-vous pas simplement utiliser:

foreach($arr as $key=>$value)
{
  echo $key;
}

Voir le manuel PHP

rwb
la source
Je pense qu'il recherche la fonction php array_search
Junior
18

Si le nom est dynamique, alors vous devez avoir quelque chose comme

$arr[$key]

ce qui signifierait que $ key contient la valeur de la clé.

Vous pouvez utiliser array_keys()pour obtenir TOUTES les clés d'un tableau, par exemple

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

te donnerais

$x = array(0 => 'a', 1 => 'c');
Marc B
la source
16

Oui, vous pouvez en fait php est l'un des rares langages à fournir un tel support.

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

}
Rajat Singhal
la source
Ce n'est pas une réponse pertinente selon la recherche et prend plus de temps. Codage moins efficace
Rishab
13

si vous devez renvoyer un élément de tableau avec la même valeur, utilisez la array_keys()fonction

$array = array('red' => 1, 'blue' => 1, 'green' => 2);
print_r(array_keys($array, 1));
aiswarya
la source
11

Voici une autre option

$array = [1=>'one', 2=>'two', 3=>'there'];
$array = array_flip($array);
echo $array['one']; 
Demissew
la source
8

utilisez array_keys()pour obtenir un tableau de toutes les clés uniques.

Notez qu'un tableau avec des clés nommées comme le vôtre $arrest également accessible avec des index numériques, comme $arr[0].

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

Jan
la source
4

vous pouvez utiliser la fonction clé de php pour obtenir le nom de la clé:

<?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);
     }
?>

comme ici: PHP: clé - Manuel

rtroulak
la source