gpt4 book ai didi

php - 无循环获取数组中 N 位置的元素

转载 作者:IT王子 更新时间:2023-10-28 23:52:43 24 4
gpt4 key购买 nike

如何在不循环的情况下在特定位置获取数组中第 n 位置的元素 keyvalue

想象

$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所以我正在查看 1e61e7512M 内存限制

我确定像 fseek 这样的数组可以解决这个问题..但不确定它是否存在

最佳答案

假设 PHP 5.4,使用数组取消引用:

echo $array[array_keys($array)[$position]];

在早期版本中,您需要将其分成两行:

$keys = array_keys($array);
echo $array[$keys[$position]];

如果您必须访问多个元素,那么在 5.4+ 中使用两行方法也是值得的,这样您就可以只调用一次相对昂贵的 array_keys() 函数。此外,取消引用方法假定数组中的特定位置存在,但它可能不存在。将其分解为多个操作将使您能够处理该错误情况。

虽然您当然不需要访问 key ,但您可以简单地执行以下操作:

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 - 无循环获取数组中 N 位置的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15093859/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com