将新值推送到索引数组时
$array[] = 'new value';
PHP文档解释了如何在[MAX_INDEX + 1]位置添加它。
将新值推送到关联数组
时$array['key'] = 'new value';
它的工作方式相同,但我没有在文档中看到任何解释来确认它是如何或为什么这样做的。订单似乎在我的实施中是一致的,但我怎么知道订单将保持不变?有谁知道PHP如何在后端实现这一点?
答案 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数组本质上是哈希表,因此在重新排序之前,数组的顺序将保持不变(例如,通过对数组进行排序)。
编辑:看来这已经被投票了,请允许我在下面的评论中明确包含我链接的来源......
“PHP关联数组实际上是HashTables的实现”,来自 How is the PHP array implemented on the C level?
同样来自该来源:“PHP数组是一个链式哈希表(在关键冲突上查找O(c)和O(n)),它允许使用int和string键。它使用2种不同的哈希算法将这两种类型放入相同的散列键空间。“
“一切都是哈希表”来自http://nikic.github.io/2012/03/28/Understanding-PHPs-internal-array-implementation.html
答案 3 :(得分:0)
所有PHP数组(数字和关联)都是作为所谓的" Ordered Hash-Table"实现的。这是一个数据科学术语,相当于:"一个合理的快速键值存储,用于跟踪键和值插入的顺序"。换句话说,为了记住顺序,PHP数组有一些内存用螺栓固定。每当你把东西放进去的时候,PHP也会自动将订单放在那里。
有趣的是,这也适用于数字键 - 因此,如果将值1,2,3,4,5放入PHP数组中,PHP仍然会单独跟踪顺序。如果这听起来很浪费,那就是因为它!然而,它确实可以节省大脑周期,可以用来解决其他人的问题,无论是真实的还是想象的。