Ответ 1
Да, существует ограничение на максимальное количество элементов. Структура хеш-таблицы (массивы в основном обертки вокруг хэш-таблицы) определяется следующим образом (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;
предел - это максимальный размер unsigned int (обычно 2 ^ 32-1 для 32-разрядной ОС и для большинства 64-разрядных ОС).
Однако на практике, за исключением машин с большим количеством ОЗУ и 32-битных int, вы всегда будете нажимать на ограничение памяти, прежде чем это станет проблемой.