h == h)) { if (flag & HASH_NEXT_INSERT || flag & HASH_ADD) {-6ren">
gpt4 book ai didi

php - "next element is already occupied"错误

转载 作者:可可西里 更新时间:2023-11-01 12:18:30 27 4
gpt4 key购买 nike

当我们做类似的事情时:

<?php
$arr = array();
$arr[PHP_INT_MAX] = null;
$arr[] = null;

PHP 给出错误信息:

Warning: Cannot add element to the array as the next element is already occupied in /home/yca/script.php on line 4

为什么引擎说下一个元素已经被占用了?

这是 PHP 错误吗?

最佳答案

这将真正回答你关于 php 数组的所有问题

主要是它们不是数组。它们是看起来像数组的 map 。

http://nikic.github.io/2012/03/28/Understanding-PHPs-internal-array-implementation.html

以下是我从当前 5.5.2 源中提取的:

内部的 ulong nNextFreeElement 不会再递增从而给出这个错误

(nNextFreeElement 现在是已经被占用的 LONG_MAX)

来自 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);
}

这是我认为在这种情况下返回失败的代码部分(因为索引 LONG_MAX 已被占用)。在此调用中,标志 = HASH_NEXT_INSERT。

if ((p->nKeyLength == 0) && (p->h == h)) {
if (flag & HASH_NEXT_INSERT || flag & HASH_ADD) {
return FAILURE;
}
....

关于php - "next element is already occupied"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18286066/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com