Php:方括号中的add函数有多复杂?i、 e$x[]=&x27;价值';

Php:方括号中的add函数有多复杂?i、 e$x[]=&x27;价值';,php,arrays,Php,Arrays,假设您正在向数组中添加多个元素: $array[] = 'dog'; $array[] = 'cat'; $array[32] = 'lachupacabra'; $array[] = 'cow'; 你知道“奶牛”的指数是多少吗?不我也没有,直到我发现它是33。这似乎是合乎逻辑的,php应该引用添加到数组中的最后一个元素,并且在使用方括号语法添加元素时,它将使用前一个元素,并将其索引递增1,并将递增的索引与新值关联。但是停止,如果提前添加递增的索引,这可能会导致问题。例如: $array[]

假设您正在向数组中添加多个元素:

$array[] = 'dog';
$array[] = 'cat';
$array[32] = 'lachupacabra';
$array[] = 'cow';
你知道“奶牛”的指数是多少吗?不我也没有,直到我发现它是33。这似乎是合乎逻辑的,php应该引用添加到数组中的最后一个元素,并且在使用方括号语法添加元素时,它将使用前一个元素,并将其索引递增1,并将递增的索引与新值关联。但是停止,如果提前添加递增的索引,这可能会导致问题。例如:

$array[] = 'dog';
$array[33] = 'cat';
$array[32] = 'lachupacabra';
$array[] = 'cow';
什么,牛的指数是34。这是否意味着php在添加另一个带有方括号语法的键之前测试所有键?这将具有O(N)复杂度,或者它是否在内部某处存储类似于
$max\u key
值的内容,操作将具有O(1)复杂度,但将使用额外内存

问题#1:“[]”操作有多复杂

问题#2:如何才能得到添加元素的索引

(关于问题2,如果你不介意的话,我更喜欢O(1)操作)

编辑

我需要实现以下方法:

class X {

private $array;

public function AddItem($item) {
    $array[] = 'new value';

    return get_highest_index_with_o_1_comlexity($array);
}

public function RemoveItem($index) {
    unset($this->array[$index]);
}
}

PHP在使用[]时使用(最大索引+1)作为下一个索引。例如,如果您有
$arr=array(42=>'foo')
,则分配的下一个元素将具有键
43
。数组插入以固定时间进行。担心这一点是非常愚蠢的。

要获取数组中最后一个元素的键,请使用:

end($array);
$key = key($array);

将光标放在数组的最后一个元素上,返回当前光标位置的键。

@nikic的方法将给出最后一个键,
end($arr)
将给出最后一个元素。如果你关心最后一个键的话,似乎你在按错误的顺序做一些事情。我已经在数组中添加了元素,我想知道索引,然后删除它(如果需要的话)。我想php中没有专门的单一函数可以这样做?更改数组的内部指针只是为了获取最后一个索引?@Lu4:没有,没有专门的函数。但是如果需要,可以在完成后重置指向第一个元素的指针。