优化PHP in_array()函数,效率提高50倍
/原始程序 function pinyin($str) { //判断是否是 单拼 双拼 三拼 四拼 $pin_arr = array("a", "ai", "an", "ang", "ao", "ba", "bai", "ban", "bang", "bao", "bei", "ben", "beng", "bi", "bian", "biao", "bie", "bin", "bing", "bo", "bu", "ca", "cai", "can", "cang", "cao", "ce", "ceng", "cha", "chai", "chan", "chang", "cao", "che", "chen", "cheng", "chi", "chong", "chou", "chu", "chuai", "chuan", "chuang", "chui", "chun", "chuo", "ci", "cong", "cou", "cu", "chuan", "cui", "cun", "cuo", "da", "dai", "dan", "dang", "dao", "de", "deng", "di", "dian", "diao", "die", "ding", "dui", "dong", "dou", "du", "duan", "dui", "dun", "duo", "e", "en", "er", "fa", "fan", "fang", "fei", "fen", "feng", "fo", "fou", "fu", "ga", "gai", "gan", "gang", "gao", "ge", "gei", "gen", "geng", "gong", "gou", "gu", "gua", "guai", "guan", "guang", "gui", "gun", "guo", "ha", "hai", "han", "hang", "hao", "he", "hei", "hen", "heng", "hong", "hou", "hu", "hua", "huai", "huan", "huang", "hui", "hun", "huo", "ji", "jia", "jian", "jiang", "jiao", "jie", "jin", "jing", "jiong", "jiu", "ju", "juan", "jue", "jun", "ka", "kai", "kan", "kang", "kao", "ke", "kei", "ken", "keng", "kong", "kou", "ku", "kua", "kuai", "kuan", "kuang", "kui", "kun", "kuo", "la", "lai", "lan", "lang", "lao", "le", "lei", "leng", "li", "lia", "lian", "liang", "liao", "lie", "lin", "ling", "liu", "long", "lou", "lu", "lv", "luan", "lue", "lun", "luo", "ma", "mai", "man", "mang", "mao", "me", "mei", "men", "meng", "mi", "mian", "miao", "mie", "min", "ming", "miu", "mo", "mou", "mu", "na", "nai", "nan", "nang", "nao", "ne", "nei", "nen", "neng", "ni", "nian", "niang", "niao", "nie", "nin", "ning", "niu", "nong", "nu", "nv", "nuan", "nue", "nuo", "ou", "pa", "pai", "pan", "pang", "pao", "pei", "pen", "peng", "pi", "pian", "piao", "pie", "pin", "ping", "po", "pou", "pu", "qi", "qia", "qian", "qiang", "qiao", "qie", "qin", "qing", "qiong", "qiu", "qu", "quan", "que", "qun", "ran", "rang", "rao", "re", "ren", "reng", "ri", "rong", "rou", "ru", "ruan", "rui", "run", "ruo", "sa", "sai", "san", "sang", "sao", "se", "sen", "seng", "sha", "shai", "shan", "shang", "shao", "she", "shen", "sheng", "shi", "shou", "shu", "shua", "shuai", "shuan", "shuang", "shui", "shun", "shuo", "si", "song", "sou", "su", "suan", "sui", "sun", "suo", "ta", "tai", "tan", "tang", "tao", "te", "teng", "ti", "tian", "tiao", "tie", "ting", "tong", "tou", "tu", "tuan", "tui", "tun", "tuo", "wa", "wai", "wan", "wang", "wei", "wen", "weng", "wo", "wu", "xi", "xia", "xian", "xiang", "xiao", "xie", "xin", "xing", "xiong", "xiu", "xu", "xuan", "xue", "xun", "ya", "yan", "yong", "yao", "ye", "yi", "yin", "ying", "yo", "yong", "you", "yu", "yuan", "yue", "yun", "za", "zai", "zan", "zang", "zao", "ze", "zei", "zen", "zeng", "zha", "zhai", "zhan", "zhong", "zhao", "zhe", "zhen", "zheng", "zhi", "zhong", "zhou", "zhu", "zhua", "zhuai", "zhuan", "zhuang", "zhui", "zhun", "zhuo", "zi", "zong", "zou", "zu", "zuan", "zui", "zun", "zuo"); if (in_array($str, $pin_arr)) { return 1; } for ($i = 1; $i < strlen($str); $i++) { if ($i < 7) { if (pinyin(substr($str, 0, $i)) && $n = pinyin(substr($str, $i))) { return $n + 1; } } else { return 0; } } return 0; }
上面$pin_arr是个大数组,大概400个元素,从上可以看出单拼域名、双拼域名、三拼域名概念:如果一个域名【这里$str是指域名的中间部分,如www.scutephp.com则是scutephp】全部由$pin_arr中n个元素组成,则是n拼域名。
看看优化后的程序代码:
/** * 优化后的判断n拼域名函数 * */ $pin_arr =array('a'=>'','ai'=>'','an'=>'','ang'=>'','ao'=>'','ba'=>'','bai'=>'','ban'=>'','bang'=>'','bao'=>'','bei'=>'','ben'=>'','beng'=>'','bi'=>'','bian'=>'','biao'=>'','bie'=>'','bin'=>'','bing'=>'','bo'=>'','bu'=>'','ca'=>'','cai'=>'','can'=>'','cang'=>'','cao'=>'','ce'=>'','ceng'=>'','cha'=>'','chai'=>'','chan'=>'','chang'=>'','cao'=>'','che'=>'','chen'=>'','cheng'=>'','chi'=>'','chong'=>'','chou'=>'','chu'=>'','chuai'=>'','chuan'=>'','chuang'=>'','chui'=>'','chun'=>'','chuo'=>'','ci'=>'','cong'=>'','cou'=>'','cu'=>'','chuan'=>'','cui'=>'','cun'=>'','cuo'=>'','da'=>'','dai'=>'','dan'=>'','dang'=>'','dao'=>'','de'=>'','deng'=>'','di'=>'','dian'=>'','diao'=>'','die'=>'','ding'=>'','dui'=>'','dong'=>'','dou'=>'','du'=>'','duan'=>'','dui'=>'','dun'=>'','duo'=>'','e'=>'','en'=>'','er'=>'','fa'=>'','fan'=>'','fang'=>'','fei'=>'','fen'=>'','feng'=>'','fo'=>'','fou'=>'','fu'=>'','ga'=>'','gai'=>'','gan'=>'','gang'=>'','gao'=>'','ge'=>'','gei'=>'','gen'=>'','geng'=>'','gong'=>'','gou'=>'','gu'=>'','gua'=>'','guai'=>'','guan'=>'','guang'=>'','gui'=>'','gun'=>'','guo'=>'','ha'=>'','hai'=>'','han'=>'','hang'=>'','hao'=>'','he'=>'','hei'=>'','hen'=>'','heng'=>'','hong'=>'','hou'=>'','hu'=>'','hua'=>'','huai'=>'','huan'=>'','huang'=>'','hui'=>'','hun'=>'','huo'=>'','ji'=>'','jia'=>'','jian'=>'','jiang'=>'','jiao'=>'','jie'=>'','jin'=>'','jing'=>'','jiong'=>'','jiu'=>'','ju'=>'','juan'=>'','jue'=>'','jun'=>'','ka'=>'','kai'=>'','kan'=>'','kang'=>'','kao'=>'','ke'=>'','kei'=>'','ken'=>'','keng'=>'','kong'=>'','kou'=>'','ku'=>'','kua'=>'','kuai'=>'','kuan'=>'','kuang'=>'','kui'=>'','kun'=>'','kuo'=>'','la'=>'','lai'=>'','lan'=>'','lang'=>'','lao'=>'','le'=>'','lei'=>'','leng'=>'','li'=>'','lia'=>'','lian'=>'','liang'=>'','liao'=>'','lie'=>'','lin'=>'','ling'=>'','liu'=>'','long'=>'','lou'=>'','lu'=>'','lv'=>'','luan'=>'','lue'=>'','lun'=>'','luo'=>'','ma'=>'','mai'=>'','man'=>'','mang'=>'','mao'=>'','me'=>'','mei'=>'','men'=>'','meng'=>'','mi'=>'','mian'=>'','miao'=>'','mie'=>'','min'=>'','ming'=>'','miu'=>'','mo'=>'','mou'=>'','mu'=>'','na'=>'','nai'=>'','nan'=>'','nang'=>'','nao'=>'','ne'=>'','nei'=>'','nen'=>'','neng'=>'','ni'=>'','nian'=>'','niang'=>'','niao'=>'','nie'=>'','nin'=>'','ning'=>'','niu'=>'','nong'=>'','nu'=>'','nv'=>'','nuan'=>'','nue'=>'','nuo'=>'','ou'=>'','pa'=>'','pai'=>'','pan'=>'','pang'=>'','pao'=>'','pei'=>'','pen'=>'','peng'=>'','pi'=>'','pian'=>'','piao'=>'','pie'=>'','pin'=>'','ping'=>'','po'=>'','pou'=>'','pu'=>'','qi'=>'','qia'=>'','qian'=>'','qiang'=>'','qiao'=>'','qie'=>'','qin'=>'','qing'=>'','qiong'=>'','qiu'=>'','qu'=>'','quan'=>'','que'=>'','qun'=>'','ran'=>'','rang'=>'','rao'=>'','re'=>'','ren'=>'','reng'=>'','ri'=>'','rong'=>'','rou'=>'','ru'=>'','ruan'=>'','rui'=>'','run'=>'','ruo'=>'','sa'=>'','sai'=>'','san'=>'','sang'=>'','sao'=>'','se'=>'','sen'=>'','seng'=>'','sha'=>'','shai'=>'','shan'=>'','shang'=>'','shao'=>'','she'=>'','shen'=>'','sheng'=>'','shi'=>'','shou'=>'','shu'=>'','shua'=>'','shuai'=>'','shuan'=>'','shuang'=>'','shui'=>'','shun'=>'','shuo'=>'','si'=>'','song'=>'','sou'=>'','su'=>'','suan'=>'','sui'=>'','sun'=>'','suo'=>'','ta'=>'','tai'=>'','tan'=>'','tang'=>'','tao'=>'','te'=>'','teng'=>'','ti'=>'','tian'=>'','tiao'=>'','tie'=>'','ting'=>'','tong'=>'','tou'=>'','tu'=>'','tuan'=>'','tui'=>'','tun'=>'','tuo'=>'','wa'=>'','wai'=>'','wan'=>'','wang'=>'','wei'=>'','wen'=>'','weng'=>'','wo'=>'','wu'=>'','xi'=>'','xia'=>'','xian'=>'','xiang'=>'','xiao'=>'','xie'=>'','xin'=>'','xing'=>'','xiong'=>'','xiu'=>'','xu'=>'','xuan'=>'','xue'=>'','xun'=>'','ya'=>'','yan'=>'','yong'=>'','yao'=>'','ye'=>'','yi'=>'','yin'=>'','ying'=>'','yo'=>'','yong'=>'','you'=>'','yu'=>'','yuan'=>'','yue'=>'','yun'=>'','za'=>'','zai'=>'','zan'=>'','zang'=>'','zao'=>'','ze'=>'','zei'=>'','zen'=>'','zeng'=>'','zha'=>'','zhai'=>'','zhan'=>'','zhong'=>'','zhao'=>'','zhe'=>'','zhen'=>'','zheng'=>'','zhi'=>'','zhong'=>'','zhou'=>'','zhu'=>'','zhua'=>'','zhuai'=>'','zhuan'=>'','zhuang'=>'','zhui'=>'','zhun'=>'','zhuo'=>'','zi'=>'','zong'=>'','zou'=>'','zu'=>'','zuan'=>'','zui'=>'','zun'=>'','zuo'=>''); function changed_pinyin($str) { //判断是否是 单拼 双拼 三拼 四拼 global $pin_arr; if(isset($pin_arr[$str])){ return 1; } $length = strlen($str); for ($i = 1; $i < $length; $i++) { if ($i < 7) { if (changed_pinyin(substr($str, 0, $i)) && $n = changed_pinyin(substr($str, $i))) { return $n + 1; } } else { return 0; } } return 0; } function microtime_float() { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } //随机生成字符串用于测试 $random_array = array(); for($i = 0; $i < 5000; $i++){ $str = array_merge(range(0,9),range('a','z')); shuffle($str); $random_array[] = implode('',array_slice($str,0, array_rand(range(2, 15)))); } $time_start = microtime_float(); foreach($random_array as $row){ changed_pinyin($row); //大于30s //pinyin($row); //小于0.5s } $time_end = microtime_float(); $time = $time_end - $time_start; echo "耗时: $time seconds\n";
很显然上面这个函数主要一直在执行in_array()函数,所以第一步就是优化in_array()函数:
这里我了解到PHP Array的KEY是进行HASH组织的,查询很快。而VALUE是由KEY组织存放,本身没有索引,每次查找都是遍历。
于是,我将in_array()那段改了下:
$pin_arr = array_flip($pin_arr); if(array_key_exists($str,$pin_arr)){ return 1; }
效率提高不明显,考虑到$pin_arr数组太大,于是我将其作为全局变量,提到外面,于是时间缩短了几十倍,对于判断数组元素是否存在,通过测试发现使用array_key_exists随着循环的次数增加,程序运行的时间增加量是成几何级数增加的,当一个数组元素个数超过1000时运行速度就非常慢了,isset()的效率要远高于array_key_exists()。于是效率又提高了几倍。
最后当然是把执行函数strlen($str)提到循环外,这不用多说了吧!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

随着互联网的发展,PHP应用程序在互联网应用领域中变得越来越常见。但是,PHP应用程序的高并发访问会导致服务器的CPU使用率高,从而影响应用程序的性能。为了优化PHP应用程序的性能,Memcached缓存技术成为了一种很好的选择。本文将介绍如何使用Memcached缓存技术优化PHP应用程序CPU的使用率。Memcached缓存技术简介Memcached是一

目前,PHP已成为互联网开发中最加盛行的编程语言之一,而PHP程序的性能优化也成为了最紧迫的问题之一。在处理大规模的并发请求时,一秒钟的延迟都可能对用户体验产生巨大的影响。如今,APCu(AlternativePHPCache)缓存技术已经成为优化PHP应用性能的一种重要的方法之一。本文将介绍如何使用APCu缓存技术来优化PHP应用程序的性能。一、APC

如何通过PHP优化SuiteCRM的客户端性能概述:SuiteCRM是一个功能强大的开源客户关系管理(CRM)系统,但在处理大量数据和并发用户时,可能会出现性能问题。本文将介绍一些通过PHP编程技巧来优化SuiteCRM客户端性能的方法,并附上相应的代码示例。使用适当的数据查询和索引数据库查询是CRM系统的核心操作之一。为了提高查询性能,需要使用适当的数据查

如何优化PHP的数据库连接和查询性能?数据库是Web开发中不可或缺的一部分,而PHP作为一种广泛使用的服务器端脚本语言,其与数据库的连接和查询性能对于整个系统的性能至关重要。本文将介绍一些优化PHP数据库连接和查询性能的技巧和建议。使用持久化连接:在PHP中,每次执行数据库查询时都会建立一次数据库连接。而持久化连接可以在多次查询中重用同一个数据库连接,从而减

针对不同PHP版本优化函数性能的方法包括:使用分析工具识别函数瓶颈;启用opcode缓存或使用外部缓存系统;添加类型注释提高性能;根据PHP版本选择合适的字符串连接和排序算法。

如何利用PHP优化SuiteCRM的项目管理功能SuiteCRM是一款功能强大的开源客户关系管理(CRM)系统,它提供了广泛的功能和可定制性。在项目管理方面,SuiteCRM提供了一些基本功能,如任务分配、进度跟踪和文件共享等。然而,有时我们需要根据特定的业务需求对项目管理功能进行优化。在本文中,我们将介绍如何利用PHP编程语言来扩展和优化SuiteCRM的

PHP网站访问速度优化:如何减少页面重定向?概述:在开发和优化一个PHP网站时,提高网站的访问速度是一个关键的考虑因素。页面重定向是一个常见的性能问题,它会导致额外的HTTP请求和延迟,从而影响用户体验。本文将介绍如何通过减少页面重定向来优化PHP网站的访问速度,并提供一些代码示例。检查并修复无效的URL跳转:页面重定向通常是由于无效的URL跳转所引起的。这

如何利用PHP优化织梦建站效果在当今互联网崛起浪潮中,搭建一个高效、优质的网站愈发重要。织梦(DedeCMS)是一个功能强大的建站系统,但有时候它的默认功能可能无法完全满足我们的需求。在这篇文章中,我们将探讨如何利用PHP优化织梦建站效果,并提供一些具体的代码示例。1.优化网站速度网站速度是用户体验和SEO排名的重要因素之一,通过优化PHP代码可以提高网站
