PHP中的数组内部指针是什么?

What is an array internal pointer in PHP?

我正在使用 end() 将数组的内部指针设置为它的最后一个元素。然后我使用 key() 来获取最后一个元素的键。

例如:

$array = ('one' => 'fish', 'two' => 'fish', 'red' => 'fish', 'blue' => 'fish');
end($array)
$last_key = key($array);

唯一不明白的是数组的内部指针究竟是什么。有人可以向我解释吗?我一直在尝试,但找不到解释。

此外,设置数组的内部指针如何影响该数组?

在 PHP "behind the scenes" 中有一个用 C 编写的 "arrays" 的内部实现。这个实现定义了数组数据实际存储在内存中的方式、数组的行为方式的细节,如何访问它们等。此 C 实现的一部分是 "array pointer",它仅指向数组的特定索引。在非常简化的 PHP 代码中,它是这样的:

class Array {

    private $data = [];
    private $pointer = 0;

    public function key() {
        return $this->data[$this->pointer]['key'];
    }

}

您无法从 PHP 代码直接访问此数组指针,您只能使用 PHP 函数(如 endreset 间接修改和影响它, each 等。使这些功能发挥作用是必要的;否则你不能使用 next() 迭代数组,因为它会在哪里记住 "next" 条目是什么?