php 陣列去重

2021-07-25 16:31:00 字數 3466 閱讀 5615

對陣列元素進行去重,我們一般會使用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() 函式把鍵值重新排序(即只取陣列中的 value,key 重新生成 0,1,2,3……..)。

<?php

$arr = array();

// 建立100000個隨機元素的陣列

for($i=0; $i

<100000; $i++)

// 記錄開始時間

$starttime = getmicrotime();

// 去重

$arr = array_unique($arr);

// 記錄結束時間

$endtime = getmicrotime();

$arr = array_values($arr);

echo

'unique count:'.count($arr).'

'; echo

'run time:'.(float)(($endtime-$starttime)*1000).'ms

'; echo

'use memory:'.getusememory();

/*** 獲取使用記憶體

*@return float

*/function

getusememory

() /**

* 獲取microtime

*@return float

*/function

getmicrotime

()?>

unique count:99

run time:653.39303016663ms

use memory:5120kb

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

上面是原作者的結果,由於我的環境是 ubuntu + php7,因此結果不一樣:

unique count:99

run time:266.930103302ms

use memory:2048kb

執行時間需要約 270ms,記憶體占用約 2m

php 有乙個鍵值互換的方法 array_flip(),我們可以使用這個方法去重,因為鍵值互換,原來重複的值會變為相同的鍵,由於鍵值必須唯一,因此能夠達到去重的目的。

然後再進行一次鍵值互換,把鍵和值換回來則可以完成去重。

<?php

$arr = array();

// 建立100000個隨機元素的陣列

for($i=0; $i

<100000; $i++)

// 記錄開始時間

$starttime = getmicrotime();

//$arr = array_unique($arr);

// 使用鍵值互換去重

$arr = array_flip($arr);

$arr = array_flip($arr);

// 記錄結束時間

$endtime = getmicrotime();

//重新生成鍵值

$arr = array_values($arr);

echo

'unique count:'.count($arr).'

'; echo

'run time:'.(float)(($endtime-$starttime)*1000).'ms

'; echo

'use memory:'.getusememory();

/*** 獲取使用記憶體

*@return float

*/function

getusememory

() /**

* 獲取microtime

*@return float

*/function

getmicrotime

()?>

unique count:99

run time:12.840032577515ms

use memory:768kb

使用array_flip方法去重,執行時間需要約13ms,記憶體占用約2m

上面是原作者的結果,由於我的環境是 ubuntu + php7,因此結果不一樣:

unique count:99

run time:5.2969455718994ms

use memory:2048kb

執行時間需要約 5ms,記憶體占用約 2m

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

可以發現,使用了 array_flip() 函式,效率提高幅度很大。

除了上面的方法外,我們還可以使用 array_keys() 函式,就是將上面**中的:

// 使用鍵值互換去重

$arr = array_flip($arr);

$arr = array_flip($arr);

// 記錄結束時間

$endtime = getmicrotime();

//重新生成鍵值

$arr = array_values($arr);

換成:

$arr = array_flip($arr);

$arr = array_keys($arr);

$endtime = getmicrotime();

即可。

array_keys(),取陣列的所有 key 作為 value 重新組成陣列。

執行結果:

unique count:99

run time:5.2149295806885ms

use memory:2048kb

與 array_flip() 基本不發生變化,當然,我沒有看過這兩個函式的原始碼,不能確切的說哪個方法更好。

總的來說,比 array_unique() 的效能好的不是一點點。

本部落格參考(90%+)自

php 陣列去重

一維陣列的重複項 使用array unique函式即可,使用例項如下 bb array unique aa print r bb 二維陣列的重複項 對於二維陣列咱們分兩種情況討論,一種是因為某一鍵名的值不能重複,刪除重複項 另一種因為內部的一維陣列不能完全相同,而刪除重複項,下面舉例說明 因為某一鍵...

php 陣列去重

一維陣列的重複項 使用array unique函式即可,使用例項如下 bb array unique aa print r bb 二維陣列的重複項 對於二維陣列咱們分兩種情況討論,一種是因為某一鍵名的值不能重複,刪除重複項 另一種因為內部的一維陣列不能完全相同,而刪除重複項,下面舉例說明 因為某一鍵...

PHP陣列去重

建立乙個包含重複值的,一共四個元素的陣列 array array green blue orange blue 翻轉陣列,你將會得到唯一鍵值的陣列 array array flip array 然後再翻轉一次,將鍵和值重新放置 array array flip array print r array...