PHP数组实际上是如何工作的?

PHP数组实际上是如何工作的?,php,arrays,Php,Arrays,我正在学习PHP,我有一个问题困扰着我。PHP数组在内部似乎是哈希映射。如果你给一个数组一个键和一个值,它几乎肯定要在把它放入一个实际的数组之前通过某种散列函数,对吗?那么,如果我给数组一系列键和值,然后将它们转储到屏幕上,为什么PHP会保持我输入值的顺序呢 例如: $arr = array(); $arr[1] = 'one'; $arr[3] = 'three'; $arr[2] = 'two'; foreach($arr as $key => $val) echo "$ke

我正在学习PHP,我有一个问题困扰着我。PHP数组在内部似乎是哈希映射。如果你给一个数组一个键和一个值,它几乎肯定要在把它放入一个实际的数组之前通过某种散列函数,对吗?那么,如果我给数组一系列键和值,然后将它们转储到屏幕上,为什么PHP会保持我输入值的顺序呢

例如:

$arr = array();
$arr[1] = 'one';
$arr[3] = 'three';
$arr[2] = 'two';

foreach($arr as $key => $val)
    echo "$key => $val<br>"
$arr=array();
$arr[1]=“一”;
$arr[3]=“三”;
$arr[2]=“两个”;
foreach($arr作为$key=>$val)
回显“$key=>$val
在一个典型的hashmap中呈现“
1=>1,2=>2,3=>3
”,但我得到的是“
1=>1,3=>3,2=>2
”,这对我来说意味着在任何实际的数据类型中都必须同时维护和顺序以及键


提前感谢您的解释。

关于数组存储为哈希表或有序映射的说法是正确的。基本上,PHP中的所有内容都是一个哈希表


请参见此处:

关于存储为哈希表或有序映射的数组,您是正确的。基本上,PHP中的所有内容都是一个哈希表


请参见此处:

文档中的第一行:“PHP中的数组实际上是一个有序映射。映射是一种将值与键关联的类型”,因此是的,它们是有序的。简短的回答是,它类似于文档中的javas LinkedHashMap第一行:“PHP中的数组实际上是一个有序映射。映射是一种将值与键关联的类型”,所以是的,简单的回答是,它类似于javas linkedHashMapRight,但哈希表不应该记录我在2.Sure之前添加了3的事实。如果您查看链接,哈希表包含用于包含数组的pListNext和pListLast的bucket的arBucket。对,但是哈希表不应该跟踪我在2之前添加了3的事实。当然。如果查看该链接,哈希表包含用于存储桶的arBucket,其中包含用于数组的pListNext和pListLast。