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 は配列を反復処理します。これは、キー メソッドを使用すると、「現在の」配列要素が foreach サイクルの次の要素になることを意味します。あなたのコードは、達成しようとしているものに対して適切に構築されていません。

代わりにこれを使用してください:

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

注: foreach サイクル内で配列要素の値を変更する場合を除き、&$value を使用する必要はありません。

于 2013-08-29T09:47:47.827 に答える
1

A note to complete the info about using reference as foreach loop variables:

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

Reference of a $value and the last array element remain even after the foreach loop. It is recommended to destroy it by unset().

So if you decided to use a reference as a foreach variable, you have unset it after the foreach.

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