массивы — PHP: in_array () против производительности array_intersect ()

Что и насколько быстрее — ручная итерация по массиву с foreach и проверка на needle появление с in_array()или используя array_intersect()?

5

Решение

эталонный тест

Тестовый скрипт

<?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,

6

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector