关于php:如何查找foreach索引

How to find the foreach index

是否可以找到foreach指数?

for循环中,如下所示:

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

$i会给你索引。

我是否必须使用for循环,或者有什么方法可以在foreach循环中获取索引?


1
2
3
foreach($array as $key=>$value) {
    // do stuff
}

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


你可以在你的foreach中放置一个hack,比如在每次运行时增加一个字段,这正是for循环在数字索引数组中给你的。这样的字段将是需要手动管理(增量等)的伪索引。

一个foreach将以$key值的形式给您提供索引,因此不需要这样的黑客攻击。

例如,在foreach

1
2
3
4
5
6
7
8
9
$index = 0;
foreach($data as $key=>$val) {
    // Use $key as an index, or...

    // ... manage the index this way..
    echo"Index is $index
"
;
    $index++;
}


需要注意的是,您可以在任何数组上调用key()来查找当前的键。您可以猜测,current()将返回当前值,next()将把数组指针移动到下一个元素。


欧文的回答很好。如果只需要键,并且正在使用数组,那么这也可能很有用。

1
2
3
foreach(array_keys($array) as $key) {
//  do stuff
}


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


这两个回路是等效的(当然,除了安全栏杆):

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

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

1
2
3
4
5
6
7
for ($i=0; $i<count($things); $i++) {
    echo"Thing".$i." is".$things[$i];
}

foreach ($things as $i=>$thing) {
    echo"Thing".$i." is".$thing;
}


PHP数组有内部指针,请尝试以下操作:

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

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


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

1
2
3
4
5
6
$var = array(2,5);

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

你的输出将是

1
2
2
5

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

1
2
3
4
5
6
$var = array_push($var,10);

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

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


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

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

这很容易而且正常


我想添加这个,我在Laravel中使用它只是索引我的表:

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

我的代码:

1
2
3
4
5
@foreach($resultsPerCountry->first()->studies as $result)
  <tr>
    <td>{{ ++$loop->index}}</td>                                    
  </tr>
@endforeach

1
2
3
foreach(array_keys($array) as $key) {
//  do stuff
}


我通常在处理关联数组时这样做:

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

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

1
2
3
foreach ($array as $indx => $value) {
  //do something
}


1
2
3
foreach($arrvariable as $key=>$value){
echo"$key";
}