在没有循环的数组中的N位置获取元素
如何在没有循环的特定位置获得位于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
问题与方法是
为什么不使用循环
为什么不使用数据库
为什么不使用SplFixedArray
这将是解决方案,但我后面weer因为我没有使用正面的键(我真的这不公平的PHP部分)
Fatal error: Uncaught exception 'InvalidArgumentException'
with message 'array must contain only positive integer keys'
大数据集意味着什么:
1e6
1e7
这个问题在PHP中管理巨型数组,所以我看着1e6
或1e7
的512M memory limit
肯定像fseek
阵列会做的伎俩..但不知道如果存在
假设PHP 5.4,数组解引用:
echo $array[array_keys($array)[$position]];
在早期版本中,您需要将其分成两行:
$keys = array_keys($array);
echo $array[$keys[$position]];
如果您必须访问多个元素,那么在5.4+中使用双线方法也是值得的,以便您只能调用一次相对昂贵的array_keys()
函数。 另外,解引用方法假定数组中的特定位置存在,而不是。 将其分解为多个操作将允许您处理该错误情况。
虽然你不需要访问密钥,但你可以简单地做:
echo array_values($array)[$position];
// or
$values = array_values($array);
echo $values[$position];
编辑
ArrayIterator
类也可以为你做到这一点:
$iterator = new ArrayIterator($array);
$iterator->seek($position);
echo $iterator->key(), " = ", $iterator->current(); // D = Four
这样做可能是最便宜的方法,假设它在内存中不创建数组的副本(仍在研究此元素),并且可能是多次访问任意键的最佳方法。
你想要的是不可能的。 PHP的数组可以通过密钥进行高效的访问,但是没有通过偏移进行有效的访问。 该订单仅作为链接列表提供,因此您希望获得的最佳效率是O(n)循环,它只是遍历数组并查找偏移量:
$i = 0;
foreach ($array as $value) {
if ($i++ === $offset) {
// found value
}
}
如果你希望这个操作很快,那么你将不得不使用一个正确的,数字的和按顺序编入索引的数组。
实际上你不需要$ values数组:
$keys = array_keys($array);
$value_3=$array[$keys[3]];
链接地址: http://www.djcxy.com/p/53041.html