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 函数(如 end
、reset
间接修改和影响它, each
等。使这些功能发挥作用是必要的;否则你不能使用 next()
迭代数组,因为它会在哪里记住 "next" 条目是什么?
我正在使用 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 函数(如 end
、reset
间接修改和影响它, each
等。使这些功能发挥作用是必要的;否则你不能使用 next()
迭代数组,因为它会在哪里记住 "next" 条目是什么?