6

これを見てください:

<?php
    $array = array('a' => '…', 'b' => '…', 'c' => '…', 'd' => '…', 'e' => '…', 'f' => '…');
    foreach ($array as $key => $val){
        echo "current key: $key, next key: ".key(($array))."<br>";
    }
?>

出力:

current key: a, next key: b
current key: b, next key: c
current key: c, next key: d
current key: d, next key: e
current key: e, next key: f
current key: f, next key: a

foreachループ内の連想配列の次のキーを取得する関数を探していました。少し試してみたところ、突然うまくいきました。(私の例でわかるように)。

しかし、なぜこれが機能するのですか?それは意味がありますか?…私にはありません!これを説明してもらえますか?

それは部品のせいですkey(($array))が、なぜですか?つまり..それは間違いでした..書きたかったのですがkey($array)、2つのラッピングブラケットを削除するのを忘れました。偶然の一致でした!!!

なぜこのように動作するのですか?つまり、それは良いですが…????

4

1 に答える 1

4

keyのPHPマニュアルによると、key()は現在の配列位置のインデックス要素を返します。

key問題は、、または二重括弧でもそれほど問題ではありません。Keyは参照によって配列を受け取るため、二重括弧はあまり効果がありません。

動作はforeachから発生します。配列を反復処理する場合foreach、PHPのバージョンが異なれば、配列の内部currentポインターの設定時に異なる動作をします。これは、、、、などが呼び出されたときに見ているものですkey()next()current()

PHPの配列は、ほとんどの言語の配列とは異なります。それらは実際にはオブジェクトです(特に連想配列)。それらをリンクリストのようなものと考えてください(これらはリンクリストではありませんが、説明のために私と一緒に行ってください)-反復するときは、現在どこにいて、次にどこに行くのかを知る必要があります。

ここで明らかに起こっていることは、実行しているPHPのバージョンに関係なく、コードで変数と変数を設定した直後に、forループの先頭で要素へforeachの内部currentポインターを設定していることです。next$key$value

その後のPHPの更新によりこのコードが破損する可能性があるため、この動作には絶対に依存しません。これは、この特定のバージョンの楽しい偶然の一致です。次のキーが必要な場合は、foreachループの置き換えを検討してください。next()のPHPマニュアルには良い例があります。また、「関連項目」セクションの、、およびその他の関数prev()も確認してください。each()

于 2012-12-02T19:54:04.887 に答える