我有一个问题,我无法找到答案。
我正在构建一个包含文件十六进制值的非常大的数组(如$array[0]=B5
$array[1]=82
,依此类推,直到$array[1230009]
)
当我创建一个函数来操纵该数组中的某些偏移并将$array
作为引用(function parse(&$array) { ... }
)时,它比我正常传递数组(function parse($array) { ... }
)需要更长的时间..
怎么可能?
PS:有没有更快的方法不使用数组?只是使用$ string =“B5 82 00 1E ..etc”,但我需要跟踪偏移量,因为我提前读取十六进制值,因为其中一些值包含长度“
答案 0 :(得分:3)
以下文章中提供了一些可能有用的信息:Do not use PHP references
接近该帖子的末尾,Johannes发布了以下部分代码(引用):
function foo(&$data) {
for ($i = 0; $i < strlen($data); $i++) {
do_something($data{$i});
}
}
$string = "... looooong string with lots of data .....";
foo(string);
与之相关的评论的一部分是(仍引用):
但是现在在这种情况下,开发人员试图变得聪明并节省时间 传递参考。
但是,strlen()
期待一份副本。 如上所述,$data
将不能对引用进行写时复制 复制用于调用strlen()
,strlen()
将非常简单 operation - 实际上strlen()
是最简单的函数之一 在PHP - 中,副本将立即销毁。
考虑到你提出的问题,你可能会遇到这样的情况......