首页 > PHP教程 > php开发知识文章

php 数组元素去重复的方法

array_unique函数进行去重

对数组元素进行去重,我们一般会使用array_unique方法,使用这个方法可以把数组中的元素去重。

去重后,键值会不按顺序,可以使用array_values把键值重新排序。

$arr = array(1, 1, 2, 3, 3, 3, 2, 6, 5, 6, 6, 7, 12, 12, 9, 9, 9);

$arr = array_unique($arr);
//输出 Array ( [0] => 1 [2] => 2 [3] => 3 [7] => 6 [8] => 5 [11] => 7 [12] => 12 [14] => 9 )
print_r($arr);

//去重后,键名会不按顺序,可以使用array_values把键值重新排序。
$arr = array_values($arr);
//输出 Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 6 [4] => 5 [5] => 7 [6] => 12 [7] => 9 )
print_r($arr);

 

更快的数组array_flip函数去重

PHP有一个键值互换的方法array_flip,我们可以使用这个方法去重,因为键值互换,原来重复的值会变为相同的键。

然后再进行一次键值互换,把键和值换回来则完成去重。

$arr = array();
// 创建100000个随机元素的数组
for ($i = 0; $i < 100000; $i++) {
$arr[] = mt_rand(1, 99);
}

// 记录开始时间
$starttime = getMicrotime();

// 使用键值互换去重
$arr = array_flip($arr);
$arr = array_flip($arr);

//使用array_unique去重
//$arr = array_unique($arr);

// 记录结束时间
$endtime = getMicrotime();
$arr = array_values($arr);
echo 'unique count:' . count($arr) . '<br>';
echo 'run time:' . (float)(($endtime - $starttime) * 1000) . 'ms<br>';
echo 'use memory:' . getUseMemory();

/** * 获取使用内存 * @return float */
function getUseMemory()
{
$use_memory = round(memory_get_usage(true) / 1024, 2) . 'kb';
return $use_memory;
}

/** * 获取microtime * @return float */
function getMicrotime()
{
list($usec, $sec) = explode(' ', microtime());
return (float)$usec + (float)$sec;
}

 php 数组元素去重复的方法

使用array_flip方法去重,运行时间需要约2.9ms,内存占用约2m

使用array_unique方法去重,运行时间需要约220ms,内存占用约2m

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持本站!

关闭
感谢您的支持,我会继续努力!
扫码打赏,建议金额1-10元


提醒:打赏金额将直接进入对方账号,无法退款,请您谨慎操作。