217

My associative array:

$arr = array(
   1 => "Value1",
   2 => "Value2",
   10 => "Value10"
);

Using the following code, $v is filled with $arr's values

 foreach ($arr as $v){
    echo $v;    // Value1, Value2, Value10
 }

How do I get $arr's keys instead?

 foreach (.....){
    echo $k;    // 1, 2, 10
 }
0

11 Answers 11

410

You can do:

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

As described in PHP docs.

Sign up to request clarification or add additional context in comments.

Comments

85

If you use array_keys(), PHP will give you an array filled with just the keys:

$keys = array_keys($arr);
foreach ($keys as $key) {
    echo $key;
}

Alternatively, you can do this:

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

Comments

47

It can be done with a regular for loop. Sometimes I find it more readable and prefer for over foreach.
So here it is:

$array = array('key1' => 'value1', 'key2' => 'value2');

$keys = array_keys($array);

for($i=0; $i < count($keys); ++$i) {
    echo $keys[$i] . ' ' . $array[$keys[$i]] . "\n";
}

/*
  prints:
  key1 value1
  key2 value2
*/

5 Comments

This is useful in some circumstances when foreach glitches out for unexplainable reasons. Good to always have at least two ways to do things.
There is no "unexplainable" reasons when it comes to computers.
Also useful for when you want to combine two subsequent array items together. i+=2 and then using $array[$keys[$i]]."_".$array[$keys[$i+1]] Just incase someone else has this same problem
The bugs in foreach are described here: php.net/manual/en/control-structures.foreach.php If you are using PHP 7, nested foreaches and foreach references work as intended. If you are using PHP 5, you should avoid using foreach by reference values and since all foreaches use internal array pointer ( current($Array) ) nesting foreaches or using PHP array functions can do weird things.
@jdrake That would be so funny, if randomly foreach does not work and you just have to relace by a for-loop. This is something they should have implemented in INTERCAL
11
foreach($array as $k => $v)

Where $k is the key and $v is the value

Or if you just need the keys use array_keys()

Comments

8

I use the following loop to get the key and value from an associative array

foreach ($array as $key => $value)
{
  echo "<p>$key = $value</p>";
}

1 Comment

The only answer that describes clearly and concisely how to use both key and value in the loop!
5

The following will allow you to get at both the key and value at the same time.

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

Comments

3

While arguably being less clear, this method is faster by roughly a factor of roughly 3.5 (at least on the box I used to test):

$foo = array(
    1 => "Value1",
    2 => "Value2",
    10 => "Value10"
);
while($bar = each($foo)){
    echo $bar[0] . " => " . $bar[1];
}

I would imagine that this is due to the fact the foreach copies the entire array before iterating over it.

1 Comment

please consider that 'each' was removed in the 8.0 PHP version.
2
 foreach($arr as $key=>$value){
    echo($key);    // key
 }

Comments

1

Use $key => $val to get the keys:

<?php

$arr = array(
    1 => "Value1",
    2 => "Value2",
    10 => "Value10",
);

foreach ($arr as $key => $val) {
   print "$key\n";
}

?>

Comments

1
<?php
$names = array("firstname"=>"maurice",
               "lastname"=>"muteti", 
               "contact"=>"7844433339");

foreach ($names as $name => $value) {
    echo $name." ".$value."</br>";
}

print_r($names);
?>

1 Comment

Good answer, though the same has been told elsewhere with more explanation.
1

Oh I found it in the PHP manual.

foreach ($array as $key => $value){
    statement
}

The current element's key will be assigned to the variable $key on each loop.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.