0

我想在我的页面上显示一个数组的所有键。

现在我有这个:

$subjectcodes[1] = "Mathematics";
$subjectcodes[2] = "Physics";
$subjectcodes[3] = "Charlie";
$subjectcodes[4] = "Chemistry";
$subjectcodes[5] = "Biology";
$subjectcodes[6] = "English";
$subjectcodes[7] = "Dutch";
$subjectcodes[8] = "German";
$subjectcodes[9] = "Sociology";
$subjectcodes[10] = "Physical Education";
$subjectcodes[11] = "Art";
$subjectcodes[12] = "General Science";
$subjectcodes[13] = "Philosophy";
$subjectcodes[14] = "Management and Organization";
$subjectcodes[15] = "Research and Design";

foreach ($subjectcodes as &$value) {
        $key = key($subjectcodes);
        echo "<option value=" . $key . ">" . $value . "</option>";
}

当我使用该代码访问我的页面时,我得到:

<option value=2>Mathematics</option>
<option value=3>Physics</option>
<option value=4>Charlie</option>
<option value=5>Chemistry</option>
<option value=6>Biology</option>
<option value=7>English</option>
<option value=8>Dutch</option>
<option value=9>German</option>
<option value=10>Sociology</option>
<option value=11>Physical Education</option>
<option value=12>Art</option>
<option value=13>General Science</option>
<option value=14>Philosophy</option>
<option value=15>Management and Organization</option>
<option value=>Research and Design</option></select>

正如你所看到的,所有的键都比假设的高 1 个。最后一个选项甚至没有钥匙......

有人为什么会这样,我该如何解决?

谢谢!

4

4 回答 4

7

尝试:

foreach ($subjectcodes as $key=>$value) {
    //$key = key($subjectcodes);
    echo "<option value=" . $key . ">" . $value . "</option>";
}
于 2013-08-29T09:45:33.450 回答
3

您可以在foreach()中使用键和值,因此请更改:

foreach ($subjectcodes as &$value) {
    $key = key($subjectcodes);
    echo "<option value=" . $key . ">" . $value . "</option>";
}

foreach ($subjectcodes as $key => $value) {
    echo "<option value=" . $key . ">" . $value . "</option>";
}
于 2013-08-29T09:47:58.000 回答
1

Foreach 遍历数组,这意味着当您使用 key 方法时,“当前”数组元素是 foreach 循环中的下一个元素。对于您要完成的工作,您的代码构造得不好。

改用这个:

foreach ($subjectcodes as $key => $value) {
    echo "<option value=" . $key . ">" . $value . "</option>";
}

注意:除非您想在 foreach 循环中更改数组元素的值,否则无需使用 &$value。

于 2013-08-29T09:47:47.827 回答
1

完成有关将引用用作 foreach 循环变量的信息的注释:

http://php.net/manual/en/control-structures.foreach.php

即使在 foreach 循环之后,对 $value 和最后一个数组元素的引用仍然存在。建议通过 unset() 将其销毁。

因此,如果您决定将引用用作 foreach 变量,则在 foreach 之后将其取消设置。

foreach ($subjectcodes as &$value)
{
}
unset($value)
于 2013-08-29T10:05:24.880 回答