虽然我发现大多数PHP批评充其量只是迂腐,但缺乏明确的数据结构排列正在成为我日常工作的实际限制。 array()构造函数创建声称可以执行所有操作的数据结构,但实际上我最终缺少相关信息,以便有效地使用它。 具体来说,我不知道它究竟是什么数据结构。这是一个清单吗?什么样的清单?指针数组?一个btree?一个hashmap?
如何执行查找?由于相同的数据结构具有数字和“关联”查找,我假设不能像在C数组中那样执行基于偏移的查找。
对于少量数据,我自然不太关心这种性能优化。但是,我在其上工作的软件开始用于中等大数据结构减慢一些的情况。
此外,是否可以明确创建每个提到的数据结构?怎么样?
答案 0 :(得分:2)
在PHP中,数组在内部表示为双向链表。有一些SPL类可以让您创建other data structures。
PHP的一部分神奇之处在于不必选择不同的数据结构,但正如您所观察到的那样,它还伴随着性能限制。
答案 1 :(得分:1)
我建议最好将数组视为一个哈希表实现,就好像你花一点时间在源代码上你会注意到虽然Zend HTs可以作为DLL遍历,但大部分操作都可能是有兴趣比较(添加,随机访问)是典型的HT实现。
在我们纯粹使用数字键进行处理的情况下,它实际上是一个不使用哈希函数的C数组的传递,在这种情况下,每个键只有一个HT存储桶。当然,通过周期性的内存重新分配来促进动态扩展数组的能力,因此你会受到惩罚(如果你没有在C ++中预先分配一个大的std :: vector)。
HTH。