繁体   English   中英

PHP大数组操作

[英]PHP big array manipulation

在读取整个数组中的整个文件(如十六进制)后,我在内存中存储了一个很大的数组:

$bin_content = fread(fopen($filename,"r"),filesize($filename));
$hex_decode = explode(" ",chunk_split(bin2hex($bin_content),2," "));
unset($bin_content);

function myfunction($i) {
  global $hex_decode;
  // stuff here 
}

当我创建一个使用此$hex_decode数组作为全局函数的函数时,脚本运行得像永远(非常慢),但是如果我调用该函数,则将$hex_decode作为参数传递( myfunction($i,$hex_decode) instead of myfunction($i) in which $i is a pointer ),则速度更快。

谁能解释为什么? 还有什么方法可以通过以其他方法读取文件来加快脚本速度。

我需要将整个文件放在该数组中,而不是逐行显示,因为我正在构建自定义的ASN.1解码器,所以我需要全部包含它。

还有什么方法可以通过以其他方法读取文件来加快脚本速度。

我个人将使用流过滤器对读取的文件进行块读取和转换,而不是一次性读取整个文件,然后使用内存中的整个文件进行转换和修复,从而处理ASN的所有过滤和修复.1流过滤器内的结构。

我知道这不是对实际问题的直接回答,而是对上面的单引号。 但它可以提供较少的内存消耗替代方法。

StackOverflow已经有一个类似的问题,请看一下:

PHP中全局变量和函数参数之间的优缺点?

如果文件很大,则可以考虑采用内存保守的方法。 ASN.1通常以类型-长度-值的结构进行编码,这意味着您不必将整个内容存储在内存中,而只需要在任何给定时间处理所需的数据即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM