我从 mysql 结果中循环了数千行并将它们添加到不同的数组中。
我得到了对数组中要操作的最后一个元素的引用(出于此问题范围之外的原因)。
即(只是场景的一个例子)
$myarray = array();
$result = &$myarray;
$row = &$result[count($result)-1]
当然这是可行的,但是正如这个线程(为什么在引用的值上调用函数(如strlen,count等)这么慢?)解释说,调用一个不期望引用变量的函数,使用引用变量,导致函数复制要操作的变量。
随着我的 $result 数组增长到数千个元素,不断地调用它,导致复制它,使代码无法使用缓慢。
我怎样才能解决这个问题 - 不建议不要通过引用使用变量。另外,我不能保留单独的行计数器。
基本上我需要知道如何取消引用引用变量(我理解不能这样做),或者其他方式来获取数组长度?,或获取对数组中最后一行的引用的方法(不弹出它)
请记住,数组也可能为空。
我已经花了很长时间才发现这是问题所在,所以我非常感谢任何解决问题的帮助。
编辑 对于每个说 count 不可能比 end/key 慢的人:只需运行这个简单的测试来确认
//setup array of 10 000 elements
$ar = array();
for ($i = 0 ; $i < 10000 ; $i++)
{
$ar[] = $i;
}
//get a reference to it
$ref = &$ar;
error_log (date("Y/m/d H:i:s")." : speed test 1 \r\n",3,"debug.log");
//do 10 000 counts on the referenced array
for ($i = 0 ; $i < 10000 ; $i++)
{
$size = count($ref);
}
error_log (date("Y/m/d H:i:s")." : speed test 2 \r\n",3,"debug.log");
//do 10 000 end/key on the referenced array
for ($i = 0 ; $i < 10000 ; $i++)
{
reset($ref);
end($ref);
$size = key($ref);
}
error_log (date("Y/m/d H:i:s")." : end \r\n",3,"debug.log");
输出:计数需要 15 秒...结束/键不到一秒
2012/07/10 17:25:38 : speed test 1
2012/07/10 17:25:53 : speed test 2
2012/07/10 17:25:53 : end