如何在没有循环的特定位置获取key
位置数组的元素value
和n
。
想象
$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
这本来是解决方案,但我跟着自己因为我没有使用正面键(我真的这在php部分也不公平)
Fatal error: Uncaught exception 'InvalidArgumentException'
with message 'array must contain only positive integer keys'
大数据集是什么意思:
1e6
或1e7
512M memory limit
我确定像数组fseek
这样的东西可以解决问题..但不确定是否存在
答案 0 :(得分:16)
假设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
这可能是执行此操作的最便宜的方法,假设它在您执行此操作时不会在内存中创建数组的副本(仍在研究此元素),并且可能是多次访问任意键的最佳方法。 / p>
答案 1 :(得分:5)
你想要的是不可能的。 PHP的数组通过密钥进行高效访问,但没有通过偏移进行有效访问。该命令仅作为链表提供,因此您可以期望的最佳效率是O(n)循环,它只是遍历数组并查找偏移量:
$i = 0;
foreach ($array as $value) {
if ($i++ === $offset) {
// found value
}
}
如果您希望此操作快速,那么您将必须使用正确的,数字和顺序索引的数组。
答案 2 :(得分:3)
实际上你不需要$ values数组:
$keys = array_keys($array);
$value_3=$array[$keys[3]];
答案 3 :(得分:0)
我不太了解你的问题,但如果你需要一个关键和位置元素
$position = 3; // get array at 3rd position
$array = array(
"A" => "Four",
"B" => "twp",
"C" => "three",
"D" => "Four",
"E" => "Five",
"F" => "Four");
$keys = array_keys($array);
$values = array_values($array);
if($values[$position] == "Four" && $keys[$position] == "D") {
echo "All it's Right!\n";
}
你不需要为这项任务进行内爆