Answers:
foreach($array as $key=>$value) {
// do stuff
}
$key
是每个$array
元素的索引
$myarr['foo'] = 'bar';
此方法失败
vatiable++;
在每次迭代时增加它。传统方式,但一直有效。
您可以将hack放入您的hack中foreach
,例如在每次运行时都增加一个字段,这正是for
循环在数字索引数组中为您提供的内容。这样的字段将是需要人工管理(增加等)的伪索引。
A 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++;
}
这两个循环是等效的(当然,请注意安全栏杆):
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循环。
$var[] = 10;
(请参见PHP链接以进行指导),因此第二个for
循环将输出预期的结果。
我通常在使用关联数组时执行此操作:
foreach ($assoc_array as $key => $value) {
//do something
}
这也可以与非关联数组一起使用。$ key将是索引值。如果您愿意,也可以这样做:
foreach ($array as $indx => $value) {
//do something
}
我想添加这个,我在laravel中使用它只是索引我的表:
我的代码:
@foreach($resultsPerCountry->first()->studies as $result)
<tr>
<td>{{ ++$loop->index}}</td>
</tr>
@endforeach
$loop
不能使用该变量,因为要求使用通用PHP。
当我不得不在相同的上下文中使用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
foreach(array_keys($array) as $key) {
// do stuff
}