我一直在对PHP中访问大型(ish)数据数组的不同方法进行一些分析.用例非常简单:我们的一些工具将数据作为关联数组输出到PHP文件中,这些文件被应用程序视为静态数据.我们制作游戏,因此数据文件的一些示例包括目录中的项目,用户必须完成的任务或地图的定义:
<?php
$some_data = array(
...lots and lots of stuff in here...
);
?>
Run Code Online (Sandbox Code Playgroud)
由于这些数组很大(400K),并且我们的许多代码都对这些数据感兴趣,因此有必要尽可能高效地访问这些数据.我决定为这样做计时3种不同的模式.在介绍方法后,我将在下面分享我的结果.
我正在寻找的是一些基于经验的验证这些方法及其时间以及任何其他方法来尝试.
在该方法中,导出器实际上创建了一个类似于以下内容的文件:
<?php
function getSomeData()
{
$some_data = array(
...lots and lots of stuff here...
);
return $some_data;
}
?>
Run Code Online (Sandbox Code Playgroud)
然后,客户端代码可以通过在需要时调用getSomeData()来获取数据.
在此方法中,数据文件看起来与上面的原始代码块相同,但是客户端代码必须跳过几个环以将数据放入本地范围.这假设数组位于名为"some_data.php"的文件中;
global $some_data; //must be the same name as the variable in the data file...
include 'some_data.php';
Run Code Online (Sandbox Code Playgroud)
这会将$ some_data数组放入范围,虽然对于客户端代码来说有点麻烦(我的意见).
此方法与方法#1几乎相同,但是getter函数不返回值,而是设置对数据的引用.
<?php
function getSomeDataByRef($some_data)
{
$some_data = array(
...lots and lots of stuff here...
);
return $some_data;
}
?>
Run Code Online (Sandbox Code Playgroud)
然后,客户端代码通过声明一个局部变量(称为任何东西)并通过引用传递给getter来检索数据:
$some_data_anyname = …Run Code Online (Sandbox Code Playgroud)