如何找到foreach索引

时间:2008-09-26 18:23:15

标签: php loops foreach

是否可以找到foreach索引?

for循环中,如下所示:

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

$i会为您提供索引。

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

15 个答案:

答案 0 :(得分:777)

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

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

答案 1 :(得分:150)

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

foreach会以$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++;
}

答案 2 :(得分:24)

应该注意的是,您可以在任何阵列上调用key()来查找其当前的密钥。您可以猜测current()将返回当前值,next()会将数组的指针移动到下一个元素。

答案 3 :(得分:17)

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

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

答案 4 :(得分:13)

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

答案 5 :(得分:8)

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

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;
}

答案 6 :(得分:5)

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

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

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

答案 7 :(得分:4)

乔纳森是对的。 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循环。

答案 8 :(得分:3)

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

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

很容易,通常

答案 9 :(得分:0)

我通常在使用关联数组时执行此操作:

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

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

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

答案 10 :(得分:0)

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

答案 11 :(得分:0)

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

  • 使用$ loop-> index
  • 我还使用++ $ loop对其进行了预增,使其从1开始

我的代码:

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

答案 12 :(得分:0)

当我不得不在相同的上下文中使用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

答案 13 :(得分:0)

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

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

输出:

Question: 1
......
Question:2
.....
.
.
.

答案 14 :(得分:-3)

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

element = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, "typeOfTeacher")))

select = Select(element)
select.select_by_value("1")