是否有可能找到foreach索引?
在for循环中如下所示:
for ($i = 0; $i < 10; ++$i) {
echo $i . ' ';
}
$i会给你索引。
我必须使用for循环还是有一些方法在foreach循环中获得索引?
是否有可能找到foreach索引?
在for循环中如下所示:
for ($i = 0; $i < 10; ++$i) {
echo $i . ' ';
}
$i会给你索引。
我必须使用for循环还是有一些方法在foreach循环中获得索引?
当前回答
foreach(array_keys($array) as $key) {
// do stuff
}
其他回答
我通常在使用关联数组时这样做:
foreach ($assoc_array as $key => $value) {
//do something
}
这也适用于非关联数组。$key将是索引值。如果你喜欢,你也可以这样做:
foreach ($array as $indx => $value) {
//do something
}
欧文有一个很好的答案。如果你只想要一个键,并且你正在处理一个数组,这可能也是有用的。
foreach(array_keys($array) as $key) {
// do stuff
}
乔纳森是对的。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;
}
这很简单,也很正常
这两个循环是等价的(当然除了安全栏杆):
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;
}