我有一个PHP应用程序,它需要大型的硬编码数据2D数组。我目前只是在每个脚本执行开始时包含的脚本中定义了这个。
我想知道是否有人更了解如何做到这一点。
我的脚本看起来如下所示。除了我有更多的行,每行还有更多的字段。
function getData() {
return array(
1 => array('name'=>'a something', 'price'=>123, 'field1'=>1, 'field2'=>3, 'field3'=>2),
2 => array('name'=>'b something', 'price'=>123, 'field1'=>3, 'field2'=>3, 'field3'=>2),
3 => array('name'=>'c something', 'price'=>234, 'field1'=>2, 'field2'=>3, 'field3'=>2),
4 => array('name'=>'d something', 'price'=>345, 'field1'=>8, 'field2'=>3, 'field3'=>2),
5 => array('name'=>'e something', 'price'=>655, 'field1'=>12, 'field2'=>3, 'field3'=>2),
6 => array('name'=>'f something', 'price'=>124, 'field1'=>11, 'field2'=>3, 'field3'=>2),
);
}
每一行都有相同的字段。所以它非常像DB表结果集。我想我可以将它放在数据库表中,但我觉得这个脚本更易于编辑,我认为它比查询数据库要快得多。
我目前的解决方案的问题是它很难阅读,因为有太多的字段。我想要的是一个易于阅读和编辑的系统,但它也必须非常快。
数据库表会更好吗?或者也许从电子表格中读取CSV文件?
答案 0 :(得分:2)
作为一般概念,以任何方便的方式编写数据,可能是CSV或类似的东西。创建一个可以将数据处理为您需要的格式的函数。缓存已处理的数据,因此不需要每次都这样做。
function getData() {
$cache = 'data.dat';
if (file_exists($cache)) {
return unserialize(file_get_contents($cache));
}
$data = <<<DATA
a something, 123, 1, 3, 2
b something, 123, 3, 3, 2
...
DATA;
$data = array_map(function ($row) {
$row = array_map('trim', explode(',', $row));
return array_combine(array('name', 'price', 'field1', 'field2', 'field3'), $row);
}, explode("\n", $data));
file_put_contents($cache, serialize($data));
return $data;
}
在上面的例子中,我只是使用HEREDOC字符串来存储数据。您可能希望将其放入外部CSV文件或XML文件中,您可以从某个地方自动生成或满足您的需要。
如果它非常大,将其存储在数据库中可能是个更好的主意。像SQLite一样轻量级的东西。