﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-静以修心-随笔分类-PHP</title><link>http://www.blogjava.net/kohri/category/51292.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 05 Apr 2012 05:05:05 GMT</lastBuildDate><pubDate>Thu, 05 Apr 2012 05:05:05 GMT</pubDate><ttl>60</ttl><item><title>array_push 效率测试</title><link>http://www.blogjava.net/kohri/archive/2012/04/04/373323.html</link><dc:creator>kohri</dc:creator><author>kohri</author><pubDate>Wed, 04 Apr 2012 10:01:00 GMT</pubDate><guid>http://www.blogjava.net/kohri/archive/2012/04/04/373323.html</guid><wfw:comment>http://www.blogjava.net/kohri/comments/373323.html</wfw:comment><comments>http://www.blogjava.net/kohri/archive/2012/04/04/373323.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/kohri/comments/commentRss/373323.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kohri/services/trackbacks/373323.html</trackback:ping><description><![CDATA[在php中数组赋值的时候用array[]这种方法效率会较高于array_push()，于是乎各种缘由就有了下面的测试<br />
测试代码：<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;">&lt;?</span><span style="color: #000000;">php<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*数组性能测试<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*for循环遍历测试函数有性能影响所以没有用，不同时调用2个函数也是担心具有影响，不封装同时执行代码是具有影响的<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*测试是更改$count参数（从10~100000&nbsp;整取递增）和调用方法手动刷新，记录时间为平均大概时间<br />&nbsp;&nbsp;&nbsp;&nbsp;*</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$count</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;arrayTest01(</span><span style="color: #800080;">$count</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;arrayTest01(</span><span style="color: #800080;">$count</span><span style="color: #000000;">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$arr</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">array</span><span style="color: #000000;">&nbsp;();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$time</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #008080;">microtime</span><span style="color: #000000;">(</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #800080;">$i</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;</span><span style="color: #800080;">$i</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$count</span><span style="color: #000000;">;&nbsp;</span><span style="color: #800080;">$i</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$array</span><span style="color: #000000;">[]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$i</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">echo</span><span style="color: #000000;">&nbsp;(</span><span style="color: #008080;">microtime</span><span style="color: #000000;">(</span><span style="color: #0000ff;">true</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$time</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;arrayTest02(</span><span style="color: #800080;">$count</span><span style="color: #000000;">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$arr</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">array</span><span style="color: #000000;">&nbsp;();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$time</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #008080;">microtime</span><span style="color: #000000;">(</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #800080;">$i</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;</span><span style="color: #800080;">$i</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$count</span><span style="color: #000000;">;&nbsp;</span><span style="color: #800080;">$i</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080;">array_push</span><span style="color: #000000;">(</span><span style="color: #800080;">$arr</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$i</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">echo</span><span style="color: #000000;">&nbsp;(</span><span style="color: #008080;">microtime</span><span style="color: #000000;">(</span><span style="color: #0000ff;">true</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$time</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #000000;">?&gt;</span></div><br />
效率大概是array[]快将近一倍，测试环境是ubuntu 11 和 windows 7<br />
<br />
<br />
<div>windows<span style="white-space: pre;">	</span>php-5.2.17/ Apache2.2<span style="white-space: pre;"> </span></div>
<div>times（$count） &nbsp; &nbsp; 10<span style="white-space: pre;">           </span>100<span style="white-space: pre;">             </span>1000<span style="white-space: pre;">           </span>10000<span style="white-space: pre;">　　　</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 100000<span style="white-space: pre;">　　　</span>&nbsp;&nbsp;&nbsp; 1000000<span style="white-space: pre;">	</span></div>
<div>array[]<span style="white-space: pre;">               </span>2.31E-05<span style="white-space: pre;">	</span>0.000104<span style="white-space: pre;">	</span>0.000867<span style="white-space: pre;">	</span>0.008417<span style="white-space: pre;">	</span>0.043666<span style="white-space: pre;">	</span>0.288323<span style="white-space: pre;">	</span></div>
<div>array_push &nbsp; &nbsp; &nbsp; &nbsp;2.79E-05<span style="white-space: pre;">	</span>0.000181<span style="white-space: pre;">	</span>0.001614<span style="white-space: pre;">	</span>0.014447<span style="white-space: pre;">	</span>0.055875<span style="white-space: pre;">	</span>0.491052<span style="white-space: pre;">	</span></div>
<div><span style="white-space: pre;"> </span> <span style="white-space: pre;">	</span> <span style="white-space: pre;">	</span> <span style="white-space: pre;">	</span> <span style="white-space: pre;"> </span></div>
<div>ubuntu11.04<span style="white-space: pre;">	</span>PHP 5.3.6/apache2.2 <span style="white-space: pre;"> </span></div>
<div>array[]<span style="white-space: pre;">              </span>1.91E-05<span style="white-space: pre;">	</span>7.70E-05<span style="white-space: pre;">	</span>0.000726<span style="white-space: pre;">	</span>0.007669<span style="white-space: pre;">	</span>0.040492<span style="white-space: pre;">	报错	</span></div>
<div>array_push &nbsp; &nbsp; &nbsp; &nbsp;2.50E-05<span style="white-space: pre;">	</span>1.26E-04<span style="white-space: pre;">	</span>0.001149<span style="white-space: pre;">	</span>0.013714<span style="white-space: pre;">	</span>0.056978<span style="white-space: pre;">	报错	</span></div>
<div><br />
这是官方网站上的说辞</div>
<div>Note: 如果用 array_push() 来给数组增加一个单元，还不如用 $array[] = ，因为这样没有调用函数的额外负担。<span style="white-space: pre;">	<br />
官网链接： </span></div>
<div><a href="http://cn.php.net/array_push" target="_bank">http://cn.php.net/array_push<span style="white-space: pre;">	</span></a><span style="white-space: pre;"> </span></div>
<div></div><img src ="http://www.blogjava.net/kohri/aggbug/373323.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kohri/" target="_blank">kohri</a> 2012-04-04 18:01 <a href="http://www.blogjava.net/kohri/archive/2012/04/04/373323.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>