php - 通过数字键或关联键更好地访问数组?

标签 php arrays performance associative-array

我遍历数组数组并通过关联键访问数组的值,这是一个代码片段。注意:我从不遍历整个数组,但只使用 10 的窗口。

//extract array from a db table (not real code)
$array = $query->executeAndFetchAssociative;

$window_start = 0;

for($i = $window_start; $i<count($array) && $i<$window_start+10; $i++)
  echo($entry["db_field"]);

这是一种用于网络界面的分页器。我收到 windows_start 值并显示接下来的 10 个值。

概念执行:

  1. 接收windows_start号
  2. 开始循环进入外层数组的window_start-TH数组
  3. 通过关联索引显示内部数组某个字段的值
  4. 移动到 window_start+1

内部数组有大约 40 个字段。外部数组可以增长很多,因为它表示一个数据库表。 现在我看到随着外部数组变大,在 10 个窗口上执行需要越来越多的时间。

我的代码需要一些“性能理论”:

如果我通过数字键输入内部数组的值,我可以获得更好的性能吗?一般来说,使用数字索引访问数组值比使用关联索引(字符串)访问数组值更快?

输入长度为 N 的数组的随机项($array[random_num])的成本如何? O(N), O(N/2) 只是举例

最后迭代数组的速度取决于数组的长度?我的意思是我总是迭代数组的 10 个元素,但数组长度对我的固定长度迭代有何影响?

谢谢 阿尔贝托

最佳答案

If I enter the values of inner arrays via numeric key can I have better performance? In general is quicker accessing the array values with numeric index than accessing with associative index (a string)?

基于整数的访问与基于字符串的访问在理论上可能存在速度差异(这取决于整数值的哈希函数与字符串值的哈希函数的作用,我还没有阅读 PHP 源代码以获得明确的答案),但它肯定可以忽略不计。

How does it cost entering a random entry ($array[random_num]) of an array of length N ? O(N), O(N/2) just for example

PHP 中的数组是通过哈希表实现的,这意味着插入是摊销的 O(1) -- 几乎所有插入都是 O(1),但少数可能是 O(n)。顺便说一下,O(n) 和 O(n/2) 是一回事;您可能想重新阅读有关算法复杂性的文本。

Finally the speed of iterating over an array depends on the array length? I mean i always iterate on 10 elements of the array, but how does the array length impact on my fixed length iteration?

不,数组长度不是一个因素。

性能下降不是因为您访问数组的方式,而是因为您似乎正在加载数据库中的所有 记录,只是为了处理其中的 10 条记录。

您应该通过在 SQL 查询中包含偏移量和限制,将分页逻辑移至数据库本身。

关于php - 通过数字键或关联键更好地访问数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9823544/

相关文章:

php - php中如何设置时间

python - 在numpy中获得matrix < matrix结果的最快方法是什么?

php - Laravel:从json类型字符串访问键值

c++ - 使用数组检查连续

sql - 我可以通过哪些方式提高 PostgreSQL 8 中正则表达式查询的性能?

performance - Android Studio 性能缓慢

php - 从临时位置获取上传的文件内容是否明智?

php - 将 groupBy() 与 orderBy() 和 limit() 一起使用

php - sql 时间差函数

c - 引用 char 数组时出现段错误