如何找到foreach索引

时间:2020-03-06 14:47:54  来源:igfitidea点击:

是否可以找到" foreach"索引?

for循环中,如下所示:

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

$ i将为我们提供索引。

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

解决方案

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

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

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

我们可以在" 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++;
}

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

欧文(Owen)有一个很好的答案。如果只需要键,并且正在使用数组,则这可能也很有用。

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

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

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

对我来说还可以(虽然只是经过初步测试)。