【发布时间】:2013-02-12 04:24:49
【问题描述】:
如何在没有循环的特定位置获取 n 位置数组的元素 key 和 value。
想象一下
$postion = 3; // get array at 3rd position
$array = array(
"A" => "Four",
"B" => "twp",
"C" => "three",
"D" => "Four",
"E" => "Five",
"F" => "Four");
$keys = array_keys($array);
$value = array_values($array);
echo implode(array_slice($keys, $postion, 1)), PHP_EOL; // Key at 3rd posstion
echo implode(array_slice($value, $postion, 1)), PHP_EOL; // Value at n position
输出
D
Four
方法的问题是
- 数组的多次复制导致更高的内存使用率
为什么不使用循环
- 您必须多次获得多个位置.. 循环大型数据集也效率不高
为什么不使用数据库
- 是的,使用 Redis 等基于内存的数据库可以让生活更轻松,但特别是数组优化
为什么不使用SplFixedArray
-
这本来是一个解决方案,但我遵循的是因为我没有使用正键(我真的这在 php 部分也不公平)
Fatal error: Uncaught exception 'InvalidArgumentException' with message 'array must contain only positive integer keys'
大数据集是什么意思:
- 实际上,当我尝试作为这个问题Managing mega Arrays in PHP 时,我偶然发现了这个问题,所以我正在查看
1e6或1e7和512M memory limit
我确信像 fseek 这样的数组可以解决问题.. 但不确定是否存在
【问题讨论】:
-
对不起,我不明白。如果你需要你的数据容器表现得像有序(索引)数组,为什么你必须首先使用关联数组?
-
您为什么使用
array_slice而不仅仅是$keys[$position]? -
@raina77ow 默认情况下数组是关联的
-
@jeroen 它是一个关联数组,键是未知的
-
不,
$keys有数字键,您只需在前面的行中设置:$keys = array_keys($array);。