PHP - 许多变量或一个数组?

Mic*_*ius 19 php arrays variables

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

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

Din*_*ino 20

试一试:)

测试1

有5个变量

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

print_r(memory_get_usage());
Run Code Online (Sandbox Code Playgroud)

Resut: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());
Run Code Online (Sandbox Code Playgroud)

Resut:620256

  • 您只描述它使用更多内存.并不是说它们更快.+1用于内存概述;). (6认同)
  • 这是很详细的答案! (2认同)

PiT*_*ber 20

简短:访问变量更快.

但是你仍然可以使用数组,因为代码质量更好.要获得更好的性能,请使用缓存.无论如何,你应该在它们发生时处理性能问题!

阵列测试

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

可变测试

$startTime = microtime(true);  

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

结果

数组:0.092秒

变量:0.064秒

使用带有字符串作为索引的数组的节点也会慢得多(hashmap).比较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());
Run Code Online (Sandbox Code Playgroud)

数组:3454128

变量:3552360

因此数组使用的内存略少.

  • 即使阵列较慢.这并不意味着它们总是更快.如果将数组中的100个项目发送到函数或100个变量,会发生什么? (4认同)