2017-04-26 126 views
2

这两者之间是否有任何性能差异?阵列初始化性能差异

$rules['a']['x'] = 'someValue'; 
$rules['a']['y'] = 'anotherValue'; 

$rules['a'] = [ 
    'x' => 'someValue', 
    'y' => 'anotherValue', 
]; 
+1

[1st](https://3v4l.org/pI9Ap/perf#output)和[2nd](https://3v4l.org/EjVfZ/perf#output),我怀疑它会有很大的不同。 – Script47

+3

你可以自己测试。做一些像'$ startTime = microtime(true); for($ i = 0; $ i <100000; $ i ++){$ rules ['a'] ['x'] ='someValue'; $ rules ['a'] ['y'] ='anotherValue';} echo'total time ='。 microtime(true) - $ startTime;'和orher情况相同。但是,我也不会做出很大的改变。 –

+0

@Tobias F是的确切我还建议这一个 –

回答

2

正如其他人所指出的,任何差别将是可忽略的,你不应该关心这个。

尽管如此,第二种方法在技术上应该是更高性能的,因为(至少它看起来)它在单个指令中完成了整个事情。

当你这样做:

$rules['a']['x'] = 'someValue'; 
$rules['a']['y'] = 'anotherValue'; 

... PHP引擎必须先检查$rules是否存在,无论它是一个数组,(在这种情况下和错误)的ArrayAccess对象与否。之后,它必须为$rules['a']做同样的事情。
它必须这样做两次,因为两行代表不同的表达式。

而在另一方面:

$rules['a'] = [ 
    'x' => 'someValue', 
    'y' => 'anotherValue', 
]; 

...只会检查什么$rules是(不关心$rules['a']是否存在它是什么类型),它只有做一次。


请注意,这是一个非常,非常简化解释,也有很多的发挥作用,有所作为的其他因素。但是,这是使用像PHP这样的高级语言的好处 - 一般来说,您不必关心甚至不知道现场幕后的工作情况。

如果你想进行性能优化,这当然是错误的看待。找出你的“瓶颈”在哪里并对它们进行处理(专业提示:10次中有9次,这是你的数据库查询)。