是否有可能找到foreach索引?

在for循环中如下所示:

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

$i会给你索引。

我必须使用for循环还是有一些方法在foreach循环中获得索引?


当前回答

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

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

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

eg

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

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

其他回答

您可以在foreach中添加一个hack,例如在每次遍历时增加一个字段,这正是for循环在数字索引数组中提供的内容。这样的字段将是一个伪索引,需要手动管理(增量等)。

foreach将以$key值的形式为您提供索引,因此不需要这样的hack。

例如,在一个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++;
}

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

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

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

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

这很简单,也很正常

欧文有一个很好的答案。如果你只想要一个键,并且你正在处理一个数组,这可能也是有用的。

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