php 高性能书写
2015-01-24信息快讯网
所以开始觉得是时候要写写博客了~
来段发现物先~
$arr = array( 'attr1' => 1 , 'attr2' => 1 , 'attr3' => 1 , ); $startTime = microtime( true ); for( $i = 0 ; $i < 1000 ; $i++ ) { if( isset( $arr['attr1'] ) ) { } if( isset( $arr['attr2'] ) ) { } if( isset( $arr['attr3'] ) ) { } } $endTime = microtime( true ); printf( "%d us.\n" , ( $endTime - $startTime ) * 1000000 ); $startTime = microtime( true ); for( $i = 0 ; $i < 1000 ; $i++ ) { foreach( $arr as $key => $value ) { switch( $key ) { case 'attr1': break; case 'attr2': break; case 'attr3': break; } } } $endTime = microtime( true ); printf( "%d us.\n" , ( $endTime - $startTime ) * 1000000 );
上面一段代码
输出结果是
us.
us.
然而,怎么看都是第一段比第二段繁琐,而且结构没有第二段清晰,
那么为什么第一段会比第二段执行快了这么多呢
我们可以看到第一段的代码中,只有3个if,
那么第二段会有多少个呢。
我们拆开了switch这个东西,可以去看看他的基本实现原理。
如果switch中,每一段case中都是使用break;结束的话,
其实这个switch好比多个if{}else if{}
所以从这个机制,我们就可以把的
foreach( $arr as $key => $value ) { switch( $key ) { case 'attr1': break; case 'attr2': break; case 'attr3': break; } }
转换成
foreach( $arr as $key => $value ) { if( $key == 'attr1' ) { } else if( $key == 'attr2' ) { } else if( $key == 'attr3' ) { } }
去理解,
从这里就可以看到,第二段代码会因应数组中的键的个数去不停地作出判断次数为1+2+3的判断,所以变成了第一段代码判断次数是3,而第二段代码判断次数是6次
所以就导致了执行效率相差了接近一倍的速度。
PHP新手用的Insert和Update语句构造类
PHP中SESSION使用中的一点经验总结
MySQL的FIND_IN_SET函数使用方法分享
php提示无法加载或mcrypt没有找到 PHP 扩展 mbstring解决办法
Notice: Trying to get property of non-object problem(PHP)解决办法
smarty巧妙处理iframe中内容页的代码
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
MySQL时间字段究竟使用INT还是DateTime的说明
PHP中call_user_func_array()函数的用法演示
PHP反转字符串函数strrev()函数的用法
PHP警告Cannot use a scalar value as an array的解决方法
Trying to clone an uncloneable object of class Imagic的解决方法
PHP中strtotime函数使用方法分享
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
php使用Smarty的相关注意事项及访问变量的几种方式
PHP中strtotime函数使用方法详解
PHP将DateTime对象转化为友好时间显示的实现代码
php.ini中date.timezone设置分析
php数据入库前清理 注意php intval与mysql的int取值范围不同
php foreach 参数强制类型转换的问题
php iconv() : Detected an illegal character in input string
PHP执行zip与rar解压缩方法实现代码
smarty模板嵌套之include与fetch性能测试
php图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
批量修改RAR文件注释的php代码
《PHP编程最快明白》第四讲:日期、表单接收、session、cookie
smarty中先strip_tags过滤html标签后truncate截取文章运用
php empty,isset,is_null判断比较(差异与异同)
PHP isset()与empty()的使用区别详解
php中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
利用Memcached在php下实现session机制 替换PHP的原生session支持
PHP Stream_*系列函数
PHP中的string类型使用说明
PHP STRING 陷阱原理说明
php set_magic_quotes_runtime() 函数过时解决方法
php set_time_limit(0) 设置程序执行时间的函数
mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
PHP 最大运行时间 max_execution_time修改方法
PHP set_time_limit(0)长连接的实现分析