PHP如何跟踪关联数组中的顺序?

时间:2011-03-16 17:33:59

标签: php associative-array

将新值推送到索引数组时

$array[] = 'new value';

PHP文档解释了如何在[MAX_INDEX + 1]位置添加它。

将新值推送到关联数组

$array['key'] = 'new value';

它的工作方式相同,但我没有在文档中看到任何解释来确认它是如何或为什么这样做的。订单似乎在我的实施中是一致的,但我怎么知道订单将保持不变?有谁知道PHP如何在后端实现这一点?

4 个答案:

答案 0 :(得分:2)

MAX_INDEX实际上与订购无关 你可以做到

$array[5] = 'new value';
$array[1] = 'new value';
$array[105] = 'new value';
$array[2] = 'new value';

和数组也将保持该顺序。

PHP数组是一个有序的地图,因此,它是保持顺序的地图 数组元素只是保持顺序,因为它们被添加(或者它被一些数组操作函数完全修改) 就是这样。

答案 1 :(得分:0)

我更愿意依赖ksort。根据我的经验,数组保持一致,直到您开始删除元素。最好手动对它们进行排序,并确保它们符合您的要求。

答案 2 :(得分:0)

How are associative arrays implemented in PHP?可能会给你一些见解。

似乎PHP数组本质上是哈希表,因此在重新排序之前,数组的顺序将保持不变(例如,通过对数组进行排序)。

编辑:看来这已经被投票了,请允许我在下面的评论中明确包含我链接的来源......

答案 3 :(得分:0)

所有PHP数组(数字和关联)都是作为所谓的" Ordered Hash-Table"实现的。这是一个数据科学术语,相当于:"一个合理的快速键值存储,用于跟踪键和值插入的顺序"。换句话说,为了记住顺序,PHP数组有一些内存用螺栓固定。每当你把东西放进去的时候,PHP也会自动将订单放在那里。

有趣的是,这也适用于数字键 - 因此,如果将值1,2,3,4,5放入PHP数组中,PHP仍然会单独跟踪顺序。如果这听起来很浪费,那就是因为它!然而,它确实可以节省大脑周期,可以用来解决其他人的问题,无论是真实的还是想象的。