PHP - Get key name of array value
Asked Answered
G

9

220

I have an array as the following:

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

I need to find out the index of $arr['firstStringName'] so that I am able to loop through array_keys($arr) and return the key string 'firstStringName' by its index. How can I do that?

Glogau answered 4/1, 2012 at 15:32 Comment(1)
Can you elaborate with a use case of what you're trying to achieve?Villainy
L
459

If you have a value and want to find the key, use array_search() like this:

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

$key will now contain the key for value 'a' (that is, 'first').

Lysias answered 4/1, 2012 at 15:37 Comment(4)
array_filter() can be used if you need to return all matching results instead of just the first matching one, as it preserves keys.Westerly
Something I think worth noting here: this solution was not working for me, until I discovered that sorting the array (sort($arr)) removes the key names, and resorts to the default 0,1,2,etc index values. So if you're sorting, use asort (asort($arr)). This maintains the key values. php.net/manual/en/function.asort.phpDorothy
What if the values aren't unique?Sluiter
@SimonRoberts Documentation solves your answer: returns the first corresponding keyDyeline
L
83
key($arr);

will return the key value for the current array element

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

Lachellelaches answered 4/1, 2012 at 15:35 Comment(2)
@AnthonyRutledge This will return only what the internal pointer is currently "pointed at". If we need another reference, then we should use zrvans method, which hunts down the requested value, specifically.Sally
@Sally is right, I used this to my advantage, I only needed the first key which is the default position for the array pointer. You can use reset($array) to reset the pointer to the beginning if you need.Shuddering
P
55

If i understand correctly, can't you simply use:

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

See PHP manual

Piccalilli answered 4/1, 2012 at 15:38 Comment(1)
I think he is looking for array_search php function - php.net/manual/en/function.array-search.phpSewellyn
D
27

Here is another option

$array = [1=>'one', 2=>'two', 3=>'there'];
$array = array_flip($array);
echo $array['one']; 
Deadhead answered 22/5, 2017 at 23:58 Comment(0)
C
26

If the name's dynamic, then you must have something like

$arr[$key]

which'd mean that $key contains the value of the key.

You can use array_keys() to get ALL the keys of an array, e.g.

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

would give you

$x = array(0 => 'a', 1 => 'c');
Cohosh answered 4/1, 2012 at 15:35 Comment(0)
A
21

Yes you can infact php is one of the few languages who provide such support..

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

}
Abundance answered 4/1, 2012 at 15:36 Comment(1)
This is not relevant answer as per search and more time consuming.. Less effective codingForehanded
S
16

if you need to return an array elements with same value, use array_keys() function

$array = array('red' => 1, 'blue' => 1, 'green' => 2);
print_r(array_keys($array, 1));
Stillwell answered 7/5, 2015 at 9:47 Comment(0)
L
13

use array_keys() to get an array of all the unique keys.

Note that an array with named keys like your $arr can also be accessed with numeric indexes, like $arr[0].

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

Liana answered 4/1, 2012 at 15:35 Comment(0)
C
8

you can use key function of php to get the key name:

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

like here : PHP:key - Manual

Chlodwig answered 11/1, 2017 at 11:56 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.