作为一名 PHP 程序员,我几乎所有事情都使用数组。我知道SPLFixedArray在某些情况下可能很有用,而且我知道PHP 数组的内存效率不是很高,但我很少遇到他们难以满足我需要的实际情况。
这与我在 Java 中工作时形成鲜明对比的是,我发现准确了解我正在使用的数据结构以及每种数据结构的优缺点绝对至关重要。如果有人建议我对 Java 中的所有内容都使用 LinkedHashMap,他们会被笑出大楼。
那么我们如何才能在 PHP 中摆脱这种快速而松散的工程呢?PHP 数组的基本细节是什么?它通常被描述为“有序映射”,但这留下了很多实现留给猜测。
PHP 数组特别擅长哪些用例?PHP 数组实际上很不擅长的一些看似简单的用例有哪些?
例如,我假设对密集的整数键数组(例如$arr = array('a','b','c','d','e');
)比有序哈希映射有更好的处理,但是密集和稀疏之间的边界在哪里?一旦我引入一个无序键,数组的效率是否会大大降低,比如$arr[10] = 'f';
?怎么样$arr[1000000] = 'g';
?我假设 PHP 不会填充大约 100 万个插槽,但如果它是一个隐藏的链表,那么$arr[rand()] = rand();
重复调用可能必须在每次插入后进行一些重新排序?
欢迎任何探索 PHP 数组底层细节的答案,即使它没有解决我提出的具体问题。