Re: [請益] 如何不用for迴圈去判斷「陣列」或「字串ꄠ…

看板PHP作者 (◤◢██◣◥█████)時間19年前 (2006/12/21 18:42), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《dinos (◤◢██◣◥█████)》之銘言: : ※ 引述《saininniang (sob)》之銘言: : : 我現在的input pattern 有1600多萬組 : : 產生完input pattern還要去各別處理 : : 程式執行完將近要十分鐘 : : 太慢了 : : 想問有沒有不要用for迴圈就能判斷「字串」或「陣列」有無值重覆? : : php有這樣的指令嗎? : : 我原本都是用兩層for迴圈去一一判斷 : : 但效率實在太差 : : 會想這樣做的原因是可以少處理將近一半的input pattern : : 應該可以省下很多時間 : : 以字串來說 : : 1223 ==> 不處理 : : 1332 ==> 不處理 : : 1432 ==> 處理 : : 以陣列來說 : : [1,2,2,3] ==>不處理 : : [1,3,3,2] ==>不處理 : : [1,4,3,2] ==>處理 : : 上述的例子其實是簡化過後的 : : 不然其實不只4個位元而已 : : 實在是太龐大了@@ : : if(array_sum(array_count_values($input))!=count($input))continue;//不處理 ~~~~~~~~~我這裡寫錯了 應該是 count : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 140.113.158.15 : 推 Kej:不太懂 array_sum(array_count_values($input))這樣有什麼用耶 12/21 18:27 : → Kej:為什麼不直接用 count(array_unique($input)) 就好? 12/21 18:28 : 推 Kej:用 if($input!=array_unique($input))continue; 這樣更快 12/21 18:36 我剛剛試了一下 source code: <?php $a=array(); for($i=0;$i<1000000;$i++)$a[]=rand(1,2000); $time1 = getmicrotime(); echo intval(count(array_count_values($a))!=count($a)); $time2 = getmicrotime(); echo intval($a!=array_unique($a)); $time3 = getmicrotime(); echo '<br />Time 1: '.($time2-$time1).'<br />'; echo '<br />Time 2: '.($time3-$time2).'<br />'; function getmicrotime(){ list($usec, $sec) = explode(" ",microtime()); return ((float)$usec + (float)$sec); } ?> result: 11 Time 1: 0.072144985198975 Time 2: 28.285458087921 不過 array_unique() 在陣列重覆性不高的狀況下的表現會比較佳 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.158.15
文章代碼(AID): #15YcK1WQ (PHP)
文章代碼(AID): #15YcK1WQ (PHP)