PHP多维关联数组替代方案

时间:2011-05-03 05:24:28

标签: php multidimensional-array associative-array

我目前有一个报告类,它从我的数据库中提取大量数据并将其格式化为要返回的4维数组。这很好但我担心这不是最好的方法。我应该使用JSON,XML,接口等吗?

基本上返回此数据的最佳方法是什么?

以下是我如何使用多维关联数组返回数据的示例:

$results[$teacherID][$studentID][$subject][$testID]

和结构的示例视图:

Array
(
[17520] => Array
    (
        [01356] => Array
           (
                ["Math"] => Array
                     (
                           [0130] => 75.2
                           [0215] => 76.8
                     )
                ["Science"] => Array
                     (
                           [0130] => 85.2
                           [0215] => 72.2
                           [0308] => 96.3
                           [0320] => 68.4
                     )
            )
        [01468] => Array
           (
                ["Math"] => Array
                     (
                           [0130] => 23.2
                           [0215] => 54.8
                     )
                ["Science"] => Array
                     (
                           [0130] => 72.6
                           [0215] => 79.1
                           [0308] => 68.7
                           [0320] => 72.2
                     )
            )
    )

[17522] => Array
    (
        ect...

3 个答案:

答案 0 :(得分:0)

在您需要时,使用您需要的数据查询数据库可能会更简单。如果您正在处理数据循环,那么从数据库中将信息转换为数组似乎是一个非常有效的解决方案。

答案 1 :(得分:0)

真的是六分之一,另外六分之一。要问的重要问题不一定是用哪种方法来移动数据,而是什么是期望的结果?

当我处理大量数据时,我将返回给用户,我几乎总是达到jQuery's Datatables,这使我能够以一种比我更愉快的方式进行排序,分页,过滤等等。我可以在合理的时间内完成。我的数据通过ajax调用遍历JSON,这使我不仅可以一次获取一组数据,而且可以“管道”数据,这样我就可以在结果之前和之后加载数据,以减少数据库命中。

但是,有时网格不是最终解决方案。也许您试图在更自定义的布局中显示它,或者只是收集要由页面中的其他元素使用的数据。这肯定是对数组或XML的有效使用,我认为我只是因为我更习惯它而只倾向于做数组....这是个人解决方案。

有时候让查询更具体是答案。但是,这也会对性能产生严重影响。同样,由于我们不知道具体细节,因此您需要确定一次获取所有内容的好处与执行多个较小交易的“成本”。

答案 2 :(得分:0)

JSON文件会稍微短一点,而且它还有一个额外的好处,就是可以用PHP以外的语言轻松解析它。 XML将更加庞大(如果下载时间是一个问题,它可能不会通过内部网)并且具有更大的处理开销,但同样可以通过PHP以外的语言轻松解析。以多种编程语言理解的格式提供数据文件总是一个好主意,因为虽然您的当前格式很容易被PHP解析,并且解析损失最小,但PHP是唯一可以理解它的语言。以JSON或XML等可移植格式提供它可以提供一定程度的未来验证,如果将来某个时候需要另一个使用相同数据但以不同语言实现的系统。