在PHP中定义大量数据的最佳方法是什么?

时间:2011-10-24 01:44:27

标签: php arrays csv

我有一个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文件?

1 个答案:

答案 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一样轻量级的东西。