PHP - 许多变量还是一个数组?
我有一个问题,什么更快...
- 我制作了许多包含我所有数据的变量,或者
- 我在一个包含我所有数据的变量中创建一个数组并访问它
我有一个问题,什么更快...
试一试:)
有 5 个变量
$myvar1 = 'hello';
$myvar2 = 'hello';
$myvar3 = 'hello';
$myvar4 = 'hello';
$myvar4 = 'hello';
print_r(memory_get_usage());
回复 : 618600
带 5 个阵列键
$myvar = array();
$myvar['var1'] = 'hello';
$myvar['var2'] = 'hello';
$myvar['var3'] = 'hello';
$myvar['var4'] = 'hello';
$myvar['var5'] = 'hello';
print_r(memory_get_usage());
回复 : 620256
简短:访问变量更快。
但是,由于代码质量更好,您仍然可能会使用数组。要获得更好的性能,请使用缓存。无论如何,您应该仅在发生性能问题时才处理它们!
$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_find与zend_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
因此,数组使用的内存确实略少。