是否有可能找到 foreach 索引?
foreach
在 for 循环中如下:
for
for ($i = 0; $i < 10; ++$i) { echo $i . ' '; }
$i 会给你索引 .
$i
我是否必须使用 for 循环或者是否有某种方法来获取 foreach 循环中的索引?
PHP数组有内部指针,所以试试这个:
foreach($array as $key => $value){ $index = current($array); }
对我来说没问题(虽然只是经过初步测试) .
foreach($array as $key=>$value) { // do stuff }
$key 是每个 $array 元素的索引
$key
$array
你可以在你的 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++; }
应该注意的是,你可以在任何数组上调用key()以找到它所在的当前键 . 您可以猜测 current() 将返回当前值, next() 将数组的指针移动到下一个元素 .
current()
next()
欧文有一个很好的答案 . 如果您只想要密钥,并且您正在使用数组,这可能也很有用 .
foreach(array_keys($array) as $key) { // do stuff }
您可以在循环外创建 $i 并在循环的底部执行 $i++ .
$i++
这两个循环是等效的(当然是安全栏):
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; }
乔纳森是对的 . 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循环 .
我认为最好的选择是这样的:
foreach ($lists as $key=>$value) { echo $key+1; }
很容易也很正常
我通常在使用关联数组时这样做:
foreach ($assoc_array as $key => $value) { //do something }
这也适用于非关联数组 . $ key将是索引值 . 如果您愿意,也可以这样做:
foreach ($array as $indx => $value) { //do something }
foreach($arrvariable as $key=>$value){ echo "$key"; }
12 回答
PHP数组有内部指针,所以试试这个:
对我来说没问题(虽然只是经过初步测试) .
$key
是每个$array
元素的索引你可以在你的
foreach
中加入一个hack,例如每次运行时增加的字段,这正是for
循环在数字索引数组中提供的 . 这样的字段将是需要手动管理(增量等)的伪索引 .foreach
将以$key
值的形式为您提供索引,因此不需要这样的黑客攻击 .例如,在 foreach
应该注意的是,你可以在任何数组上调用key()以找到它所在的当前键 . 您可以猜测
current()
将返回当前值,next()
将数组的指针移动到下一个元素 .欧文有一个很好的答案 . 如果您只想要密钥,并且您正在使用数组,这可能也很有用 .
您可以在循环外创建
$i
并在循环的底部执行$i++
.这两个循环是等效的(当然是安全栏):
例如
乔纳森是对的 . PHP数组充当将键映射到值的映射表 . 在某些情况下,如果定义了数组,则可以获取索引,例如
你的输出将是
在这种情况下,数组中的每个元素都有一个可知的索引,但是如果你那么做以下的事情
你没有输出 . 这是因为PHP中的数组不像大多数语言中那样是线性结构 . 它们更像是哈希表,可能有也可能没有所有存储值的键 . 因此,foreach不会使用索引来抓取它们,因为如果定义了数组,它们只有索引 . 如果需要索引,请确保在对其进行爬网之前完全定义了数组,并使用for循环 .
我认为最好的选择是这样的:
很容易也很正常
我通常在使用关联数组时这样做:
这也适用于非关联数组 . $ key将是索引值 . 如果您愿意,也可以这样做: