关于 eval 的优化,基于使用eval这个方法实现效率低上的有关问题
eval
nbsp
replace
str
关于 eval 的优化,基于使用eval这个方法实现效率低下的问题
需求:
根据一些指定的计算公式去获得期待值。
例子:
<br /> //提供的数据源<br /> $row = array(<br /> 'pv' => 50,<br /> 'uv' => 6,<br /> 'st' => 650,<br /> 'nuv' => 2<br /> );<br /> //需求公式,可能有些量不存在:如no<br /> $gx = '(pv+uv)/(uv-nuv+1)*10+nuv-uv+no/0+3.5';<br /> $gx = preg_replace('/[a-z][a-z_\d]+/i', ' $row[\'${0}\'] ', $gx);//处理过后公式<br /> $str = "@\$s = $gx;";//合法php语句<br /> try{<br /> @eval($str);//str和eval前使用@确保不显示错误,如某个变量不存在,或除数为0等<br /> }catch(Exception $e){}<br /> <br /> //这个方结果可求出<br />
登入後複製
这个方法,可能大家都想到,还有一些这个方法的变异:
1,使用 preg_replace_callback
2,preg_replace('//ie')使用e修正符,其实与1一样
3,使用sql来执行公司,"select 格式化后的公式",但这个方法不能处理no这个变量,还有除数为0时,会返回null
//以上是我目前的方法
循环1w次,0.25秒左右,
如果10w次,就2秒多了。
这个效率目前还接受不了。
哥们还有什么好办法没????
------解决方案--------------------
先支持一下楼主
------解决方案--------------------
还想怎么快,没法再快了。你直接用数据值计算:
echo ( $row['pv'] + $row['uv'] )/( $row['uv'] - $row['nuv'] +1)*10+ $row['nuv'] - $row['uv'] + $row['no'] /0+3.5;
速度应该是最快的了吧,但测试结果也一样。
------解决方案--------------------
第二种e 的效率测试了没有,感觉会快点呢。
------解决方案--------------------
<br /> //提供的数据源,需要先进行排序,将字符数多的键排前面<br /> $row = array(<br /> 'nuv' => 2,<br /> 'pv' => 50,<br /> 'uv' => 6,<br /> 'st' => 650,<br /> );<br /> <br /> $search = array_keys($row);<br /> $replace = array_values($row);<br /> <br /> function cal()<br /> {<br /> global $search, $replace;<br /> <br /> //需求公式,可能有些量不存在:如no<br /> $gx = '(pv+uv)/(uv-nuv+1)*10+nuv-uv+no/0+3.5';<br /> $gx = str_replace($search, $replace, $gx);// 改用str_replace替代preg_replace,效率会高一些<br /> $str = "@\$s = $gx;";//合法php语句<br /> try{<br /> @eval($str);//str和eval前使用@确保不显示错误,如某个变量不存在,或除数为0等<br /> }catch(Exception $e){}<br /> }<br /> <br /> <br /> $t1 = microtime(true);<br /> for ($i = 0; $i < 10000; $i++)<br /> {<br /> cal();<br /> }<br /> echo microtime(true) - $t1;<br /> <br /> // output: 0.18727397918701<br />
登入後複製
------解决方案--------------------
一万次 0.25 秒已经够快了
eval 时有一个语法分析过程,比较耗时
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前
By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
擊敗分裂小說需要多長時間?
3 週前
By DDD
R.E.P.O.保存文件位置:在哪里以及如何保護它?
3 週前
By DDD

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

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

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

OOBELANGUAGE錯誤Windows 11 / 10修復中出現問題的問題
