除了可读性之外,以下任何一个示例都有任何优点/缺点。第一个我将使用数组索引每次使用它时访问该值,第二个示例我将分配给临时变量然后只使用变量
$myArray = ['value_1' => 'value 1', 'value_2' => 'value 2', 'value_3' => 'value 3'];
$value1 = $myArray['value_1'];
// Do lots of things with $value1
对战
$myArray = ['value_1' => 'value 1', 'value_2' => 'value 2', 'value_3' => 'value 3'];
// Do lots of things with $myArray['value1']
答案 0 :(得分:1)
http://sandbox.onlinephpfunctions.com/code/c5acd07edcc910bfdd80a27bee0583d8540e17e3
这是100000次的结果:
First: 0.0018520355224609 with a pointer to the actual value
Second: 0.003324031829834 with a pointer to the array
就像你可以看到有一个很大的不同,但现在计算机要快速,甚至让你的时间值得担心它。
答案 1 :(得分:0)
这完全取决于你的意图。如果您只读过它,那就没有功能差异。如果你写这个值,那么可能会有功能差异。
假设在您的情况下没有功能差异,阵列访问应该比直接变量访问稍微贵一些。 然而 ,这并不意味着你应该向后弯腰以针对这种情况进行优化。性能上的差异将是如此微小,以至于在现实世界的应用中难以测量。因此,可读性应该是您唯一的决定因素。
答案 2 :(得分:0)
使用命名键比数字键慢于使用标量变量:
<?php
$myArray = ['value_1' => 'value 1', 'value_2' => 'value 2', 'value_3' => 'value 3'];
$myArray2 = ['value 1', 'value 2', 'value 3'];
$tt = microtime(true);
for ($i = 0; $i<1e7; $i++) $x = $myArray['value_1'];
$dt = microtime(true)-$tt;
echo $dt.PHP_EOL;
$tt = microtime(true);
for ($i = 0; $i<1e7; $i++) $x = $myArray2[0];
$dt = microtime(true)-$tt;
echo $dt.PHP_EOL;
$tt = microtime(true);
$y = $myArray['value_1'];
for ($i = 0; $i<1e7; $i++) $x = $y;
$dt = microtime(true)-$tt;
echo $dt.PHP_EOL;
?>
给出:
0.80559897422791 // named key
0.74200701713562 // numeric key
0.54049301147461 // scalar
多次在多次迭代的循环中解引用数组可能会很昂贵。但这主要适用于数字运算和类似的东西,其中PHP基本上不是最好的选择,不是为它设计的。
编辑有趣的是,从变量中分配整数值比从Xeon处理器上的标量整数快10-20%,而在Intel i5机器上则没有区别。代码here在Xeon框中提供以下结果:
Accessing associative array 0.900
Accessing numerical array 0.794
Assigning from reference to associative array 0.662
Assigning a reference to an associative array element 0.877
Assigning scalar variable 0.499
Assigning scalar string 0.659
Assigning scalar integer 0.562
但由于寄存器的使用,这可能因代码大小而异。