PHP - 许多变量还是一个数组?

2022-08-30 19:38:31

我有一个问题,什么更快...

  1. 我制作了许多包含我所有数据的变量,或者
  2. 我在一个包含我所有数据的变量中创建一个数组并访问它

答案 1

试一试:)

测试 1

有 5 个变量

$myvar1 = 'hello';
$myvar2 = 'hello';
$myvar3 = 'hello';
$myvar4 = 'hello';
$myvar4 = 'hello';

print_r(memory_get_usage());

回复 : 618600

测试 2

带 5 个阵列键

$myvar = array();
$myvar['var1'] = 'hello';
$myvar['var2'] = 'hello';
$myvar['var3'] = 'hello';
$myvar['var4'] = 'hello';
$myvar['var5'] = 'hello';

print_r(memory_get_usage());

回复 : 620256


答案 2

简短:访问变量更快。

但是,由于代码质量更好,您仍然可能会使用数组。要获得更好的性能,请使用缓存。无论如何,您应该仅在发生性能问题时才处理它们!

阵列测试

$n = 1000000;
$startTime = microtime(true);  
for ($i = 0; $i <= $n; $i++)
{
    $x = $a[1];
}
$endTime = microtime(true);  
$elapsed = $endTime - $startTime;
echo "Array: $elapsed seconds";

变量测试

$startTime = microtime(true);  

for ($i = 0; $i <= $n; $i++)
{
    $x = $v;
}
$endTime = microtime(true);  
$elapsed = $endTime - $startTime;
echo "Variable : $elapsed seconds";

结果

阵列:0.092 秒

可变:0.064秒

此外,使用字符串作为索引的数组的节点将慢得多(哈希映射)。比较zend_hash_findzend_hash_index_find

数组有多大,如果我使用和$a = array_fill( 0, 1000, 1 );$x = $a2[999];

记忆

不是问,但也有趣的是内存使用情况。所以我创建了一个包含10000个元素和10000个变量的数组。

$a = array();
for ($i = 0; $i <= 10000; $i++)
{
    // one array
    eval('$a[] = "test";'); // 3454128
    // Variables
    //eval('$a' . $i. ' = "test";'); // 3552360
}
print_r(memory_get_usage());

阵列:3454128

变量:3552360

因此,数组使用的内存确实略少。