12

重複の可能性:
PHP連想配列は順序付けられていますか?

異なるキーで連想配列にアイテムを追加した場合、追加の順序は保存されますか?特定の要素の「前の」要素と「次の」要素にアクセスするにはどうすればよいですか?

4

2 に答える 2

16

はい、php 配列には暗黙的な順序があります。resetnextprevおよびcurrent- または単にforeachループ- を使用して検査します。

于 2012-07-14T21:03:50.890 に答える
16

はい、順序は保持されます。PHP 配列は、順序付けられたハッシュ マップと考えることができます。

要素は「インデックスの作成時間」によって並べられていると考えることができます。例えば

$a = array();
$a['x'] = 1;
$a['y'] = 1;
var_dump($a); // x, y

$a = array();
$a['x'] = 1;
$a['y'] = 1;
$a['x'] = 2;
var_dump($a); // still x, y even though we changed the value associated with the x index.

$a = array();
$a['x'] = 1;
$a['y'] = 1;
unset($a['x']);
$a['x'] = 1;
var_dump($a); // y, x now! we deleted the 'x' index, so its position was discarded, and then recreated

要約すると、キーが現在配列に存在しないエントリを追加する場合、エントリの位置はリストの最後になります。既存のキーのエントリを更新している場合、位置は変更されません。

foreachは、上で示した自然な順序を使用して配列をループします。foreach が言語に導入されて以来、めったに使用されませんが、必要に応じて、next () current () prev () reset () および友人を使用することもできます。

また、print_r () とvar_dump () も自然な配列順序を使用して結果を出力します。

Java に精通している場合、LinkedHashMap が最も類似したデータ構造です。

于 2012-07-14T21:10:41.853 に答える