2010-10-13 80 views
0

现在我知道这个话题有一些相关的问题,但这有点独特。PHP:阵列深度将如何影响性能?

我有两个阵列结构:

array(
    [0] => array(
     'stat1' => 50, 
     'stat2' => 12, 
     'stat3' => 0, 
     'country_name' => 'United States' 
     ), 
    [1] => array(
     'stat1' => 40, 
     'stat2' => 38, 
     'stat3' => 15, 
     'country_name' => 'Ireland' 
     ), 
    [2] => array(
     'stat1' => 108, 
     'stat2' => 0, 
     'stat3' => 122, 
     'country_name' => 'Autralia' 
     ) 
    ) 

和第二

array(
    'stat1' => array(
     'countries' => array(
      'United States' => 50, 
      'Ireland' => 40, 
      'Autralia' => 108, 
      ) 
     ) 
    ), 
'stat2' => array(
     'countries' => array(
      'United States' => 12, 
      'Ireland' => 38, 
      ) 
     ) 
    ), 
etc... 

第二阵列可以去,甚至到4级或5,如果你添加这些各自国家的城市。进一步要注意的是,第二个数组结构将不会有0个数据字段(请注意,第二个数组字段不存在,因为它是0),但第一个结构将会有一整个零。另外请注意,第二个结构将有重复,即'美国'

我的问题是这些:这些数组结构如何比较它们是json_encode()并在POST ajax请求中使用?浅层深度数组是否会更快,或者更好的结构化数组在大小方面会更好?

+0

对不起,但长期的问题,我想清楚地表达我的问题 – 2010-10-13 14:34:06

+0

你是什么意思? JSON字符串的长度?这里是一个例子:http://codepad.org/fIka8aFq。您应该选择在服务器和客户端更容易处理的结构。例如,如果你想要遍历所有的国家,第一个结构是好的。但是,如果你想获得特定的国家,比如所有对'stat1'有价值的国家,那么第二个国家更合适。你可能甚至不需要嵌套数组,'stat1'=> array('United States'=> 50,'Ireland'=> 40,'Autralia'=> 108)'也可能不错。 – 2010-10-13 15:26:53

+2

如果两者之间的差异对性能有显着影响,我会很惊讶,它们是最佳的微型优化。你可能会更好 - 并且可以获得更多的速度 - 以最简单/高效的格式为使用该json编码数据的代码提供数据。 – Wrikken 2010-10-13 16:30:17

回答

1

我已经做了一些测试,对于有限的数据集,两者之间的输出数据差异(我将数据输出到文本文件中)实际上并不重要。

阵列结构1 - 所有城市和国家数据输出到68KB

阵列结构2 - 所有城市和国家数据输出到71KB

因此,有一个细微的差别,但似乎考虑到数据采用JSON格式并用于向Google可视化geomap API发送的AJAX请求时,差异不显着。

我没有测试加载差异的微观时间,但用户看0.0024微秒的加载.gif图像(我为了争论而拍摄一个随机时间)不会产生大的凹痕在可用性方面。谢谢你所有的意见