1

虽然我发现大多数 PHP 批评充其量是迂腐的,但缺乏清晰的数据结构排列正在成为我日常工作的实际限制。array() 构造函数创建了声称可以做所有事情的数据结构,但实际上我最终缺乏为了有效使用它而需要的相关信息。具体来说,我不知道它到底是什么数据结构。是清单吗?什么样的清单?指针数组?一棵树?哈希图?

查找是如何执行的?由于相同的数据结构具有数字和“关联”查找,我假设不能像在 C 数组中那样执行基于偏移量的查找。

对于少量的数据,我自然不会太在意这样的性能优化。但是,我开发的软件开始用于中等大的数据结构会稍微减慢速度的场景。

此外,是否可以显式创建每个提到的数据结构?如何?

4

2 回答 2

2

在 PHP 中,数组在内部表示为双向链表。有一些 SPL 类可以让您创建其他数据结构

PHP 的部分魔力在于不必选择不同的数据结构,但正如您所观察到的,它也有性能限制。

于 2013-02-08T00:55:51.110 回答
1

我建议最好主要将数组视为哈希表实现,就像您花一点时间研究源代码一样,您会注意到虽然 Zend HT 可以作为 DLL 遍历,但您可能有兴趣比较大多数操作(添加,随机访问)是典型的 HT 实现。

在我们纯粹处理数字键的情况下,它本质上是对 C 数组的传递,而不涉及哈希函数,在这种情况下,每个键将恰好有一个 HT 存储桶。当然,动态扩展数组的能力是通过周期性的内存重新分配来实现的,所以你会在那里受到惩罚(如果你没有在 C++ 中预先分配一个大的 std::vector 可能会受到影响)。

HTH。

于 2013-02-08T02:07:35.557 回答