是的,元素的最大数量有一个限制。哈希表结构(数组基本上是哈希表周围的包装)是这样定义的(PHP 5.3):
typedef struct _hashtable {
uint nTableSize;
uint nTableMask;
uint nNumOfElements;
ulong nNextFreeElement;
Bucket *pInternalPointer; /* Used for element traversal */
Bucket *pListHead;
Bucket *pListTail;
Bucket **arBuckets;
dtor_func_t pDestructor;
zend_bool persistent;
unsigned char nApplyCount;
zend_bool bApplyProtection;
#if ZEND_DEBUG
int inconsistent;
#endif
} HashTable;
鉴于
typedef unsigned int uint;
该限制是无符号整数的最大大小(通常在32位操作系统和大多数64位操作系统上为2 ^ 32-1)。
然而,实际上,除了在具有大量RAM和32位整数的机器上,在这成为问题之前,您将始终达到内存限制。