587

是否可以找到foreach索引?

在一个for循环中如下:

for ($i = 0; $i < 10; ++$i) {
   echo $i . ' ';
}

$i会给你索引。

我必须使用for循环还是有某种方法可以在foreach循环中获取索引?

4

14 回答 14

1090
foreach($array as $key=>$value) {
    // do stuff
}

$key是每个$array元素的索引

于 2008-09-26T18:24:33.833 回答
194

您可以在您foreachfor. 这样的字段将是需要手动管理(增量等)的伪索引。

Aforeach将以您的价值的形式为您提供索引$key,因此不需要这样的黑客攻击。

例如,在一个foreach

$index = 0;
foreach($data as $key=>$val) {
    // Use $key as an index, or...

    // ... manage the index this way..
    echo "Index is $index\n";
    $index++;
}
于 2008-09-26T18:25:54.190 回答
29

应该注意的是,您可以调用key()任何数组来找到当前键所在的位置。您可以猜到current()将返回当前值并将next()数组的指针移动到下一个元素。

于 2011-03-04T11:17:22.553 回答
23

欧文有一个很好的答案。如果您只需要密钥,并且您正在使用数组,这也可能很有用。

foreach(array_keys($array) as $key) {
//  do stuff
}
于 2008-09-26T21:35:43.080 回答
18

您可以$i在循环外部创建并$i++在循环底部执行。

于 2008-09-26T18:25:29.697 回答
10

这两个循环是等效的(当然是安全栏杆):

for ($i=0; $i<count($things); $i++) { ... }

foreach ($things as $i=>$thing) { ... }

例如

for ($i=0; $i<count($things); $i++) {
    echo "Thing ".$i." is ".$things[$i];
}

foreach ($things as $i=>$thing) {
    echo "Thing ".$i." is ".$thing;
}
于 2011-01-27T22:43:06.903 回答
10

我认为最好的选择是一样的:

foreach ($lists as $key=>$value) {
    echo $key+1;
}

这很容易而且通常

于 2016-05-12T13:59:54.563 回答
6

PHP 数组有内部指针,所以试试这个:

foreach($array as $key => $value){
   $index = current($array);
}

对我来说没问题(虽然只是经过初步测试)。

于 2008-10-28T20:43:54.667 回答
5

乔纳森是对的。PHP 数组充当映射表,将键映射到值。在某些情况下,如果定义了数组,您可以获得索引,例如

$var = array(2,5);

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

你的输出将是

2
5

在这种情况下,数组中的每个元素都有一个已知的索引,但是如果您随后执行以下操作

$var = array_push($var,10);

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

你没有输出。发生这种情况是因为 PHP 中的数组不像大多数语言那样是线性结构。它们更像是哈希表,可能有也可能没有所有存储值的键。因此 foreach 不使用索引来爬过它们,因为如果定义了数组,它们只有一个索引。如果您需要索引,请确保您的数组在爬过它们之前已完全定义,并使用 for 循环。

于 2008-09-26T18:47:18.833 回答
4

我使用++$key而不是$key++从 1 开始。通常它从 0 开始。

@foreach ($quiz->questions as $key => $question)
 <h2> Question: {{++$key}}</h2>
 <p>{{$question->question}}</p>
@endforeach

输出:

Question: 1
......
Question:2
.....
.
.
.
于 2021-05-16T14:48:37.113 回答
3

当我不得不在相同的上下文中使用 foreach 索引和值时,我以这种方式解决了:

$array = array('a', 'b', 'c');
foreach ($array as $letter=>$index) {

  echo $letter; //Here $letter content is the actual index
  echo $array[$letter]; // echoes the array value

}//foreach

于 2020-05-27T13:31:33.313 回答
2

我通常在使用关联数组时这样做:

foreach ($assoc_array as $key => $value) {
 //do something
}

这也适用于非关联数组。$key 将是索引值。如果您愿意,您也可以这样做:

foreach ($array as $indx => $value) {
  //do something
}
于 2014-07-07T00:26:57.120 回答
-1
foreach(array_keys($array) as $key) {
//  do stuff
}
于 2016-06-16T10:12:58.920 回答
-2

我想添加这个,我在 laravel 中使用它来索引我的表:

  • 使用 $loop->index
  • 我还使用 ++$loop 将其预增量为从 1 开始

我的代码:

@foreach($resultsPerCountry->first()->studies as $result)
  <tr>
    <td>{{ ++$loop->index}}</td>                                    
  </tr>
@endforeach
于 2019-04-08T09:49:02.403 回答