views:

2329

answers:

6

How do I get the current index in a foreach loop?

foreach( $arr as $key=>$val)
{
    //how to get index?
    //how to get first element in an associated array
}
A: 

$key is the index for the current array element, and $val is the value of that array element.

The first element has an index of 0. Therefore, to access it, use $arr[0]

To get the first element of the array, use this

$firstFound = false;
foreach($arr as $key=>$val)
{
    if (!$firstFound)
       $first = $val;
    else
       $firstFound = true;
    // do whatever you want here
}

// now ($first) has the value of the first element in the array
Aziz
thanks
lovespring
+3  A: 

In your sample code, it would just be $key.

If you want to know, for example, if this is the first, second, or ith iteration of the loop, this is your only option:

$i = -1;
foreach($arr as $val) {
  $i++;
  //$i is now the index.  if $i == 0, then this is the first element.
  ...
}

Of course, this doesn't mean that $val == $arr[$i] because the array could be an associative array.

Kip
+4  A: 
$i = 0;
foreach ($arr as $key => $val) {
  if ($i === 0) {
    // first index
  }
  // current index is $i

  $i++;
}
cletus
thanks
lovespring
A: 

The current index is the value of $key. And for the other question, you can also use:

current($arr)

to get the first element of any array, assuming that you aren't using the next(), prev() or other functions to change the internal pointer of the array.

Eduardo Grajeda
-1 for $key as index since arrays can have non-integer keys.
Eimantas
A: 

You could get the first element in the array_keys() function as well. Or array_search() the keys for the "index" of a key. If you are inside a foreach loop, the simple incrementing counter (suggested by kip or cletus) is probably your most efficient method though.

<?php
   $array = array('test', '1', '2');
   $keys = array_keys($array);
   var_dump($keys[0]); // int(0)

   $array = array('test'=>'something', 'test2'=>'something else');
   $keys = array_keys($array);

   var_dump(array_search("test2", $keys)); // int(1)     
   var_dump(array_search("test3", $keys)); // bool(false)
gnarf
A: 
$the_index = 0;

foreach( $arr as $key => $val ) {
  echo "Index: " . $key . " > Value: " . $val[$the_index];
}
J. LaRosee