首頁  >  文章  >  後端開發  >  如何實現php 陣列元素快速去重效果

如何實現php 陣列元素快速去重效果

jacklove
jacklove原創
2018-06-09 09:52:431804瀏覽

1.使用array_unique方法進行去重

對陣列元素進行去重,我們一般會使用array_unique方法,使用這個方法可以把陣列中的元素去重。

<?php$arr = array(1,1,2,3,3,3,4,4,5,6,6,7,8,8,9,9,9);$arr = array_unique($arr);$arr = array_values($arr);
print_r($arr);?>

輸出:

Array(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 8
    [8] => 9)

去重後,鍵值會不依序,可以用array_values把鍵值重新排序。

2.使用array_unique方法去重效率

<?php$arr = array();// 创建100000个随机元素的数组for($i=0; $i<100000; $i++){    $arr[] = mt_rand(1,99);
}// 记录开始时间$starttime = getMicrotime();// 去重$arr = array_unique($arr);// 记录结束时间$endtime = getMicrotime();$arr = array_values($arr);echo &#39;unique count:&#39;.count($arr).&#39;<br>&#39;;echo &#39;run time:&#39;.(float)(($endtime-$starttime)*1000).&#39;ms<br>&#39;;echo &#39;use memory:&#39;.getUseMemory();/**
 * 获取使用内存
 * @return float
 */function getUseMemory(){
    $use_memory = round(memory_get_usage(true)/1024,2).&#39;kb&#39;;    return $use_memory;
}/**
 * 获取microtime
 * @return float
 */function getMicrotime(){
    list($usec, $sec) = explode(&#39; &#39;, microtime());    return (float)$usec + (float)$sec;
}?>

unique count:99
run time:653.39303016663ms
use memory:5120kb

使用array_unique方法去重,運行時間需要約650ms,記憶體佔用約5m

3.更快的陣列去重方法

php有一個鍵值互換的方法array_flip,我們可以用這個方法去重,因為鍵值互換,原來重複的值會變成相同的鍵。
接著再進行一次鍵值互換,把鍵和值換回來則可以完成去重。

<?php$arr = array();// 创建100000个随机元素的数组for($i=0; $i<100000; $i++){    $arr[] = mt_rand(1,99);
}// 记录开始时间$starttime = getMicrotime();// 使用键值互换去重$arr = array_flip($arr);$arr = array_flip($arr);// 记录结束时间$endtime = getMicrotime();$arr = array_values($arr);echo &#39;unique count:&#39;.count($arr).&#39;<br>&#39;;echo &#39;run time:&#39;.(float)(($endtime-$starttime)*1000).&#39;ms<br>&#39;;echo &#39;use memory:&#39;.getUseMemory();/**
 * 获取使用内存
 * @return float
 */function getUseMemory(){
    $use_memory = round(memory_get_usage(true)/1024,2).&#39;kb&#39;;    return $use_memory;
}/**
 * 获取microtime
 * @return float
 */function getMicrotime(){
    list($usec, $sec) = explode(&#39; &#39;, microtime());    return (float)$usec + (float)$sec;
}?>

unique count:99
run time:12.840032577515ms
use memory:768kb

#使用array_flip方法去重,運行時間需要約18ms,記憶體佔用約2m

因此使用array_flip方法去重比使用array_unique方法運行時間減少 98%,記憶體佔用減少4/5;

本文說明如何實現php 陣列元素快速去重效果,更多相關內容請關注php中文網。

相關推薦:

如何透過php 找出陣列元素提高效率的方法

關於mysql 嚴格模式Strict Mode的說明講解

php使用explode分割字串新手容易忽略的問題的講解

以上是如何實現php 陣列元素快速去重效果的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn