81

If I have:

$array = array( 'one' =>'value', 'two' => 'value2' );

how do I get the string one back from $array[1] ?

Mazatec
  • 11,481
  • 23
  • 72
  • 108

11 Answers11

124

You don't. Your array doesn't have a key [1]. You could:

  • Make a new array, which contains the keys:

    $newArray = array_keys($array);
    echo $newArray[0];
    

    But the value "one" is at $newArray[0], not [1].
    A shortcut would be:

    echo current(array_keys($array));
    
  • Get the first key of the array:

     reset($array);
     echo key($array);
    
  • Get the key corresponding to the value "value":

    echo array_search('value', $array);
    

This all depends on what it is exactly you want to do. The fact is, [1] doesn't correspond to "one" any which way you turn it.

deceze
  • 510,633
  • 85
  • 743
  • 889
58
$array = array( 'one' =>'value', 'two' => 'value2' );

$allKeys = array_keys($array);
echo $allKeys[0];

Which will output:

one
Martin Tournoij
  • 26,737
  • 24
  • 105
  • 146
kennytm
  • 510,854
  • 105
  • 1,084
  • 1,005
20

If you only plan to work with one key in particular, you may accomplish this with a single line without having to store an array for all of the keys:

echo array_keys($array)[$i];
StarCrashr
  • 426
  • 4
  • 11
  • thanks... this is all that's needed for anybody in a for loop – Andrew May 05 '16 at 17:59
  • 4
    Note: This requires PHP 5.4+ - [source 1](http://php.net/manual/en/language.types.array.php#language.types.array.syntax.accessing) | [source 2](https://wiki.php.net/rfc/functionarraydereferencing). – Pang Jul 05 '16 at 08:41
  • @Pang Good to know! Thanks. – StarCrashr Sep 20 '18 at 05:28
12

Or if you need it in a loop

foreach ($array as $key => $value)
{
    echo $key . ':' . $value . "\n";
}
//Result: 
//one:value
//two:value2
Decko
  • 18,553
  • 2
  • 29
  • 39
  • 2
    It echoing all keys. But topicstarter need to get key by numeric index. It is no the same. – Alex Pliutau Nov 04 '10 at 10:54
  • 1
    I'm well aware of that. But given the fact that topicstarter is new to php, this could have been what he was trying to achieve and just didn't know of the foreach syntax ;) – Decko Nov 12 '10 at 08:50
2
$array = array( 'one' =>'value', 'two' => 'value2' );
$keys  = array_keys($array);
echo $keys[0]; // one
echo $keys[1]; // two
Alex Pliutau
  • 21,392
  • 27
  • 113
  • 143
0

The key function helped me and is very simple:

The key() function simply returns the key of the array element that's currently being pointed to by the internal pointer. It does not move the pointer in any way. If the internal pointer points beyond the end of the elements list or the array is empty, key() returns NULL.

Example:

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

The above example will output:

fruit1<br />
fruit4<br />
fruit5<br />
Alfie
  • 2,341
  • 2
  • 28
  • 45
  • Please don't just post a link; it might not work in the future. Instead, expand on what the function does and how to use it. – Andrew Jul 29 '14 at 16:16
0

You might do it this way:

function asoccArrayValueWithNumKey(&$arr, $key) {
   if (!(count($arr) > $key)) return false;
   reset($array);
   $aux   = -1;
   $found = false;
   while (($auxKey = key($array)) && !$found) {
      $aux++;
      $found = ($aux == $key);
   }
   if ($found) return $array[$auxKey];
   else return false;
}

$val = asoccArrayValueWithNumKey($array, 0);
$val = asoccArrayValueWithNumKey($array, 1);
etc...

Haven't tryed the code, but i'm pretty sure it will work.

Good luck!

Nicolas
  • 126
  • 2
0

If it is the first element, i.e. $array[0], you can try:

echo key($array);

If it is the second element, i.e. $array[1], you can try:

next($array);
echo key($array);

I think this method is should be used when required element is the first, second or at most third element of the array. For other cases, loops should be used otherwise code readability decreases.

VivekP
  • 71
  • 1
  • 6
0

One more example:

Get the most frequent occurrence(s) in an array:

PHP >= 7.3:

$ php --version
PHP 7.4.3 (cli) (built: Oct  6 2020 15:47:56) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

$ php -a
Interactive mode enabled

php > $a = array_count_values(array('abc','abc','def','def','def'));
php > var_dump($a);
array(2) {
  ["abc"]=>
  int(2)
  ["def"]=>
  int(3)
}
php > arsort($a);
php > var_dump($a);
array(2) {
  ["def"]=>
  int(3)
  ["abc"]=>
  int(2)
}
php > var_dump(array_key_first($a));
string(3) "def"
php > var_dump(array_keys($a)[1]);
string(3) "abc"

If you have the key, you can easily query the value (= the frequency).

qräbnö
  • 2,722
  • 27
  • 40
0

just posting another solution for those that array_keys() is not working

$myAssociativeArray = [
  'name' => 'sun',
  'age' => 21
);

$arrayKeys = [];
foreach($myAssociativeArray as $key => $val){
    array_push($arrayKeys, $key);
}

print_r($arrayKeys)

// ['name', 'age']
Baraja Swargiary
  • 381
  • 2
  • 10
-1

Expanding on Ram Dane's answer, the key function is an alternative way to get the key of the current index of the array. You can create the following function,

    function get_key($array, $index){
      $idx=0;
      while($idx!=$index  && next($array)) $idx++;
      if($idx==$index) return key($array);
      else return '';
    }
Aurovrata
  • 2,000
  • 27
  • 45