返回顶部
首页 > 资讯 > 精选 >使用 PHP 内置函数和自定义函数去重数组的性能对比
  • 368
分享到

使用 PHP 内置函数和自定义函数去重数组的性能对比

php数组 2024-04-26 20:04:37 368人浏览 泡泡鱼
摘要

array_unique() 是去重数组性能最好的内置函数。哈希表法自定义函数性能最优,哈希值用作键,值为空。循环法实现简单但效率低,建议使用内置或自定义函数进行去重。array_uni

array_unique() 是去重数组性能最好的内置函数。哈希表法自定义函数性能最优,哈希值用作键,值为空。循环法实现简单但效率低,建议使用内置或自定义函数进行去重。array_unique() 耗时 0.02 秒、array_reverse + array_filter() 耗时 0.04 秒、哈希表法耗时 0.01 秒、循环法耗时 0.39 秒。

PHP 内置函数和自定义函数去重数组的性能对比

引言

去重数组是指移除数组中重复的元素,保留唯一的值。php 提供了许多内置函数和自定义函数来执行此操作。本文将比较这些函数的性能,并提供实战案例。

内置函数

  • array_unique():内置函数,通过 哈希表 进行去重,效率较高。
  • array_reverse() + array_filter():使用 array_reverse() 逆序数组,然后结合 array_filter() 移除重复元素。

自定义函数

  • 哈希表法:创建一个哈希表,键为数组中的值,值为空。遍历数组,将每个值添加到哈希表。去重后的数组就是哈希表的键。
  • 循环法:使用两个指针遍历数组。指针 1 负责外层循环,指针 2 负责内层循环。如果外层指针的值不在内层指针的值中,则将该值添加到结果数组中。

实战案例

假设我们有一个包含 100 万个整数的数组 $array

$array = range(1, 1000000);
$iterations = 100;

性能测试

function test_array_unique($array, $iterations) {
  $total_time = 0;
  for ($i = 0; $i < $iterations; $i++) {
    $start_time = microtime(true);
    $result = array_unique($array);
    $end_time = microtime(true);
    $total_time += $end_time - $start_time;
  }
  $avg_time = $total_time / $iterations;
  echo "array_unique: $avg_time seconds\n";
}

function test_array_reverse_array_filter($array, $iterations) {
  $total_time = 0;
  for ($i = 0; $i < $iterations; $i++) {
    $start_time = microtime(true);
    $result = array_filter(array_reverse($array), 'array_unique');
    $end_time = microtime(true);
    $total_time += $end_time - $start_time;
  }
  $avg_time = $total_time / $iterations;
  echo "array_reverse + array_filter: $avg_time seconds\n";
}

function test_hash_table($array, $iterations) {
  $total_time = 0;
  for ($i = 0; $i < $iterations; $i++) {
    $start_time = microtime(true);
    $result = array_values(array_filter($array, function ($value) {
      static $hash_table = [];
      if (isset($hash_table[$value])) {
        return false;
      }
      $hash_table[$value] = true;
      return true;
    }));
    $end_time = microtime(true);
    $total_time += $end_time - $start_time;
  }
  $avg_time = $total_time / $iterations;
  echo "hash table: $avg_time seconds\n";
}

function test_loop($array, $iterations) {
  $total_time = 0;
  for ($i = 0; $i < $iterations; $i++) {
    $start_time = microtime(true);
    $result = array_values(array_filter($array, function ($value) use (&$array) {
      for ($j = 0; $j < count($array); $j++) {
        if ($j == $i) {
          continue;
        }
        if ($value == $array[$j]) {
          return false;
        }
      }
      return true;
    }));
    $end_time = microtime(true);
    $total_time += $end_time - $start_time;
  }
  $avg_time = $total_time / $iterations;
  echo "loop: $avg_time seconds\n";
}

test_array_unique($array, $iterations);
test_array_reverse_array_filter($array, $iterations);
test_hash_table($array, $iterations);
test_loop($array, $iterations);

结果

使用 100 万个整数的数组,每个函数的平均运行时间如下:

  • array_unique:0.02 秒
  • array_reverse + array_filter:0.04 秒
  • 哈希表法:0.01 秒
  • 循环法:0.39 秒

结论

根据测试结果,array_unique() 是去重数组最快的内置函数,而哈希表法是性能最优的自定义函数。循环法虽然容易实现,但效率较低。在处理大型数组时,建议采用 array_unique() 或哈希表法进行去重。

以上就是使用 PHP 内置函数和自定义函数去重数组的性能对比的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 使用 PHP 内置函数和自定义函数去重数组的性能对比

本文链接: https://lsjlt.com/news/609655.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作