作为一名PHP程序员,我几乎将数组用于所有事情。我知道SPLFixedArray在某些情况下可能很有用,也知道PHP数组不是非常内存高效, 但实际上很少遇到它们无法满足我的需求的情况。
相比之下,在Java中工作时,我发现我非常重要的是了解我使用的数据结构的确切情况以及每种数据结构的优缺点。如果有人建议我在Java中仅使用LinkedHashMap,他们会被嘲笑出去。
那么我们如何在PHP中摆脱这样快速而松散的工程方式?PHP数组的底层细节是什么?通常将其描述为“有序映射”,但这留下了很多实现上的猜测。
PHP数组的一些用例是特别好的吗?PHP数组实际上在一些看似简单的用例中表现得非常差吗?
例如,我假设有一种更好的处理密集整数键数组(例如
欢迎任何探讨PHP数组底层细节的答案,即使它没有回答我提出的具体问题。
相比之下,在Java中工作时,我发现我非常重要的是了解我使用的数据结构的确切情况以及每种数据结构的优缺点。如果有人建议我在Java中仅使用LinkedHashMap,他们会被嘲笑出去。
那么我们如何在PHP中摆脱这样快速而松散的工程方式?PHP数组的底层细节是什么?通常将其描述为“有序映射”,但这留下了很多实现上的猜测。
PHP数组的一些用例是特别好的吗?PHP数组实际上在一些看似简单的用例中表现得非常差吗?
例如,我假设有一种更好的处理密集整数键数组(例如
$arr = array('a','b','c','d','e');
)的方法,比有序哈希映射更高效,但是什么是密集和稀疏之间的边界呢?当我引入一个非有序键时,例如 $arr [10] ='f';
,数组会不会立即变得非常低效呢? $arr [1000000] ='g';
呢?我假设PHP并没有填充中间的 ~1百万个槽,但如果它在内部是链表,那么反复调用 $arr [rand()] = rand();
将在每次插入后必须进行一些重新排序?欢迎任何探讨PHP数组底层细节的答案,即使它没有回答我提出的具体问题。