Как я могу получить текущий индекс массива в цикле foreach? - PullRequest
34 голосов
/ 20 сентября 2009

Как получить текущий индекс в цикле foreach?

foreach ($arr as $key => $val)
{
    // How do I get the index?
    // How do I get the first element in an associative array?
}

Ответы [ 9 ]

53 голосов
/ 20 сентября 2009

В вашем примере кода это будет просто $key.

Если вы хотите знать, например, является ли это первой, второй или i th итерацией цикла, это единственный вариант:

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

Конечно, это не значит, что $val == $arr[$i], потому что массив может быть ассоциативным массивом.

15 голосов
/ 20 февраля 2013

Это самый исчерпывающий ответ на данный момент, и он избавляет от необходимости использования переменной $i. Это комбинация ответов Кипа и Гнарфа.

$array = array( 'cat' => 'meow', 'dog' => 'woof', 'cow' => 'moo', 'computer' => 'beep' );
foreach( array_keys( $array ) as $index=>$key ) {

    // display the current index + key + value
    echo $index . ':' . $key . $array[$key];

    // first index
    if ( $index == 0 ) {
        echo ' -- This is the first element in the associative array';
    }

    // last index
    if ( $index == count( $array ) - 1 ) {
        echo ' -- This is the last element in the associative array';
    }
    echo '<br>';
}

Надеюсь, это кому-нибудь поможет.

11 голосов
/ 20 сентября 2009
$i = 0;
foreach ($arr as $key => $val) {
  if ($i === 0) {
    // first index
  }
  // current index is $i

  $i++;
}
7 голосов
/ 19 сентября 2013
foreach($array as $key=>$value) {
    // do stuff
}

$ key - индекс каждого $ массива элемента

4 голосов
/ 20 сентября 2009

Текущий индекс - значение $key. А для другого вопроса вы также можете использовать:

current($arr)

чтобы получить первый элемент любого массива, при условии, что вы не используете next(), prev() или другие функции для изменения внутреннего указателя массива.

3 голосов
/ 02 сентября 2015

Вы можете получить значение индекса с помощью этого

foreach ($arr as $key => $val)
{
    $key = (int) $key;
    //With the variable $key you can get access to the current array index
    //You can use $val[$key] to

}
0 голосов
/ 28 ноября 2013

хорошо, так как это первый хит Google для этой проблемы:

function mb_tell(&$msg) {
    if(count($msg) == 0) {
        return 0;
    }
    //prev($msg);
    $kv = each($msg);
    if(!prev($msg)) {
        end($msg);

        print_r($kv);
        return ($kv[0]+1);
    }
    print_r($kv);
    return ($kv[0]);
}
0 голосов
/ 20 сентября 2009

Вы также можете получить первый элемент в функции array_keys(). Или array_search() ключи для «индекса» ключа. Если вы находитесь внутри цикла foreach, простой счетчик приращений (предложенный kip или cletus), вероятно, ваш самый эффективный метод.

<?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)
0 голосов
/ 20 сентября 2009

$key - индекс для текущего элемента массива, а $val - значение этого элемента массива.

Первый элемент имеет индекс 0. Поэтому для доступа к нему используйте $arr[0]

Чтобы получить первый элемент массива, используйте это

$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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...