Điều này nghĩa đen sẽ trả lời tất cả câu hỏi của bạn về mảng trong php
Chủ yếu là chúng không phải là mảng. Chúng là những bản đồ giống như mảng.
http://nikic.github.io/2012/03/28/Understanding-PHPs-internal-array-implementation.html
Sau đây tôi kéo từ 5.5.2 nguồn hiện tại:
Các ulong nNextFreeElement nội bộ sẽ không tăng bất kỳ như vậy, hơn đưa ra lỗi này
(các nNextFreeElement tại là LONG_MAX đó là đã bị chiếm đóng)
Từ nguồn PHP:
if (zend_hash_next_index_insert(Z_ARRVAL_P(container), &new_zval, sizeof(zval *), (void **) &retval) == FAILURE) {
zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
retval = &EG(error_zval_ptr);
Z_DELREF_P(new_zval);
}
Đây là phần mã mà tôi tin là trả lại lỗi trong trường hợp này (vì chỉ mục LONG_MAX đã bị chiếm đóng). Trong cuộc gọi này, cờ = HASH_NEXT_INSERT.
if ((p->nKeyLength == 0) && (p->h == h)) {
if (flag & HASH_NEXT_INSERT || flag & HASH_ADD) {
return FAILURE;
}
....
Nguồn
2013-08-17 07:03:16
Không thể là mảng được lấp đầy từ 0 đến MAX giá trị nguyên. Và bởi vì nó tối đa bạn không thể thêm một phần tử khác trong mảng? – bestprogrammerintheworld
Tại sao bạn thậm chí cố gắng sử dụng 2 tỷ phần tử? –
Nó hoạt động [ở đây] (http://codepad.org/8fyIoxZ7). Có thể là phiên bản PHP của bạn cũ. –