PHP效率开发--数组中的引号
数组概述
数组,作为一种简单的线性数据结构,在程序开发的过程中时常会被用到。PHP将数组分为两类:数值数组和关联数组。
数值数组和大多数其它语言的使用方法一样:在一对中括号中加上一个数字表示要存取的值在数组中的存放位置。例如:$array[0] = ”value”。
关联数组是PHP的一大亮点,它通过使用字符串来索引数组,例如在某个水果销售系统中,我们要为几种水果指定价格,于是我们可以这样写:$price[‘Apple’] = 1.8; $price[‘Banana’] = 4.6; $price[Pear] = 2.8; $price[Other] = 0.5; 。
问题出现
从上面的例子可以看出关联数组使得我们的代码更加清晰,同时在很大程度上提高了开发效率。细心的可能会发现在我们举例关联数组时,前两个数组中(Apple和Banana)的字符串索引我们加上了单引号,而后面两个(Pear和Other)则没有!是的,为了提高开发效率,PHP允许我们在使用关联数组时不必给数组的索引字符串加上引号。这确实给我们带来了很大的方便:首先PHPer不必在每次写数组时都要记得加上烦人的引号;其次可以避免引号配对问题。不过这带来了另外的一个问题――性能。在接下来的文章中我们将通过例子来解释这个现象。
性能测试
性能和效率之间似乎总是呈反比的,有时为了效率我们必须牺牲性能,有时有不得不反过来,不过在这里我们应该选择哪个呢?先看下面的代码:
<?
// 定义一个存放临时数据的文件
$fp = fopen ( ' delete.txt ' , ' w ' );
// 初始化数组
$array = array ( ' name ' => ' value ' );
// 定义循环次数
$LOOPTIMES = 100 ;
// 得到初始时间
$t0 = number_format ( microtime ( true ) , 10 , ' . ' , '' );
// 循环显示没有使用引号的数组
for ( $i = 0 ; $i < $LOOPTIMES ; $i ++ )
fputs ( $fp , $array [name]);
$t1 = number_format ( microtime ( true ) , 10 , ' . ' , '' );
$rs1 = $t1 - $t0 ;
// 循环显示使用了引号的数组
for ( $i = 0 ; $i < $LOOPTIMES ; $i ++ )
fputs ( $fp , $array [ ' name ' ]);
$t2 = number_format ( microtime ( true ) , 10 , ' . ' , '' );
$rs2 = $t2 - $t1 ;
// 显示结果
echo " $t1 - $t0 = " . $rs1 . " " ;
echo " $t2 - $t1 = " . $rs2 . " " ;
fclose ( $fp );
?>
上面的代码分别循环100次使用大引号的关联数组和不代引号的关联数组,最后输出它们所消耗的时间。下图显示了允许程序10次后的结果:
在10次的测试中,使用引号所花费的平均时间为0.003,而没使用引号的平均时间为0.032911,大约是前者的10倍!
总结
从上的例子中可以看出:不使用引号的关联数组所带来的优点比较起来其,在关联数组中使用引号将使得程序的性能得到很大的提升。而且由于有了像Zend这样优秀的PHP集成开发环境,它不仅能为PHP字符串自动添加引号,而且配备了出色的代码检查功能。这使得我们更没有理由继续使用没有引号的关联数组。