PHP如何跟踪关联数组中的顺序?
当按下一个新的值到一个索引数组PHP如何跟踪关联数组中的顺序?
$array[] = 'new value';
PHP文档解释了它如何被在[MAX_INDEX + 1]位置加入。
当推一个新值到一个关联数组
$array['key'] = 'new value';
它的工作原理是相同的,但我没有看到任何解释文件以确认如何或为何它这样做。该命令似乎在我的实施中是一致的,但我怎么知道订单将保持不变?有谁知道PHP如何在后端实现这一点?
How are associative arrays implemented in PHP?可能会给你一些见解。
似乎PHP数组基本上是哈希表,所以数组的顺序将保持不变,直到您重新排序为止(例如,通过对数组进行排序)。
编辑:看来这是越来越downvoted,请允许我明确包括我挂在下面这里注释的源...
“PHP关联数组实际上的实现散列表“从 How is the PHP array implemented on the C level?
- 来自该源
又道:” PHP阵列是链式哈希表(O(c)和上键冲突为O(n)的查找),其允许int和字符串键它。使用2种不同的哈希算法来适应两种典型值es转换为相同的散列键空间。“
“一切都是一个哈希表”,从http://nikic.github.io/2012/03/28/Understanding-PHPs-internal-array-implementation.html
对不起死灵,但这个答案没有意义。如果它是一个简单的散列表,条目的顺序应该基于每个键的散列值,而不是插入顺序。实际上,这就是哈希表在其他语言中的表现。然而PHP关联数组似乎跟踪了插入的顺序。所以这个问题对我来说还是开放的。它是如何做到的?它可以依赖吗? – Tobia 2014-07-02 16:58:10
http://stackoverflow.com/questions/2350361/how-is-the-php-array-implemented-on-the-c-level – n00dle 2014-07-03 08:40:22
http://nikic.github.io/2012/03/28/Understanding -PHPs内部阵列-implementation.html – n00dle 2014-07-03 08:41:59
MAX_INDEX实际上与排序无关。
你可以做
$array[5] = 'new value';
$array[1] = 'new value';
$array[105] = 'new value';
$array[2] = 'new value';
和阵列将保留该顺序为好。
PHP数组是一个有序的映射,所以它是保持它的顺序的映射。
数组元素只是在添加它们之后保持顺序(或者它完全由某个数组操作函数修改)。这就是全部。
我相信实施细则都在[zend_hash.c(http://svn.php.net/viewvc/php/php被发现-src /中继/ Zend的/ zend_hash.c?视图=标记)。索引保持独立我假设,并且' - > pInternalPointer'显示最后。 – mario 2011-03-16 17:42:20
它们可能只是链接哈希映射。链接提供顺序而不管哈希。 – 2011-03-16 17:54:32
伟大的答案!正是我在找的! :-) – 2015-01-17 18:33:43