【问题标题】:PHP: in_array() vs array_intersect() performancePHP:in_array() 与 array_intersect() 性能
【发布时间】:2017-03-12 21:36:24
【问题描述】:

什么和多少更快 - 使用 foreach 手动迭代数组并使用 in_array() 或使用 array_intersect() 检查 needle 的出现?

【问题讨论】:

标签: php arrays performance benchmarking array-intersect


【解决方案1】:

基准测试

测试脚本

<?php
$numbers = range(32, 127);
$numbersLetters = array_map('chr', $numbers);

for (;;) {
    $numbersLetters = array_merge($numbersLetters, $numbersLetters);

    if (count($numbersLetters) > 10000) {
        break;
    }
}

$numbers = range(1, count($numbersLetters));

printf("Sample size: %d elements in 2 arrays (%d total) \n", count($numbers), count($numbers) + count($numbersLetters));
printf("Benchmarking speed in foreach + in_array() scenario... (this might take a while) ");

shuffle($numbers);
shuffle($numbersLetters);

$t1 = microtime(true);

foreach ($numbers as $number) {
    if (in_array($number, $numbersLetters)) {}
}

$t2 = microtime(true);

printf("DONE!\n");
printf("Time elapsed: %.5f \n", $t2 - $t1);

// =============================------------===============================

printf("Benchmarking speed with array_intersect...");

shuffle($numbers);
shuffle($numbersLetters);

$t1 = microtime(true);

array_intersect($numbers, $numbersLetters);

$t2 = microtime(true);

printf("DONE!\n");
printf("Time elapsed: %.5f \n", $t2 - $t1);

输出

Sample size: 12288 elements in 2 arrays (24576 total) 
Benchmarking speed in foreach + in_array() scenario... (this might take a while) DONE!
Time elapsed: 3.79213 
Benchmarking speed with array_intersect...DONE!
Time elapsed: 0.05765 

小提琴:http://ideone.com/OZ2Idf

结论

array_intersect 比 foreach + in_array 快得多。

为什么array_intersect 更快?

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-09
  • 2017-04-21
  • 2011-07-31
相关资源
最近更新 更多