是否可以在以下的 for
循环中找到 foreach
的索引?
for ($i = 0; $i < 10; ++$i) {
echo $i . ' ';
}
$i
将会给你索引。
我是否必须使用 for
循环,或者在 foreach
循环中有没有某种方法可以获取索引?
foreach($array as $key=>$value) {
// do stuff
}
$key
是每个 $array
元素的索引。
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++;
}
需要注意的是,您可以在任何数组上调用key()
来查找当前的键。 正如您所想的那样,current()
将返回当前值,next()
会将数组指针移动到下一个元素。
Owen给出了一个好答案。如果你只想得到关键信息,并且正在使用数组,这也可能非常有用。
foreach(array_keys($array) as $key) {
// do stuff
}
foreach(array_keys($array) as $index=>$key)
。 - Leo你可以在循环外创建$i
,并在循环底部执行$i++
。
按照这个代码:
foreach ($lists as $key=>$value) {
echo $key+1;
}
这是简单而干净的代码
这两个循环是等价的(当然除了安全栏杆):
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;
}
我使用++$key
代替$key++
来从1开始计数。通常它从0开始。
@foreach ($quiz->questions as $key => $question)
<h2> Question: {{++$key}}</h2>
<p>{{$question->question}}</p>
@endforeach
输出:
Question: 1
......
Question:2
.....
.
.
.
PHP数组有内部指针,因此请尝试以下内容:
foreach($array as $key => $value){
$index = current($array);
}
我觉得可以(虽然只进行了初步测试)。
乔纳森是正确的。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循环遍历数组时,发现没有任何输出,这可能是因为PHP中的数组不像大多数语言中一样是线性结构,而更像哈希表,可能并不具有所有存储值的键。因此,foreach循环不使用索引来遍历它们,因为只有在数组被定义时才有索引。如果需要索引,请确保在遍历之前完全定义了你的数组,并使用for循环。
$var[] = 10;
(请参考PHP链接指南),这样第二个for
循环可以输出期望的结果。 - Peter Krauss
$myarr['foo'] = 'bar';
,这种方法就会失败。 - Toskanvariable++;
增加它。这是传统的方法,但一直以来都有效。 - Jomar Sevillejo