@AstonMartin

Как ускорить php скрипт?

Здравствуйте!

У меня есть php скрипт, который сравнивает два текстовых файла со списом цифровых значенией и те, которые не встретились во втором файле записывает в итоговый файл.
PHP 5.5.14 установлен на OS X 10.10.2 (macbook air, Core i5), запускаю "php ./script.php" просто из консоли.
В каждом файле примерно по 150 тысяч строк-записей. Исполняется долго, час-два.
Мне почему то казалось, что такие простые вещи как сравнение массивов должны делаться влет.
Скажите, пожалуйста, можно ли тут что-то оптимизировать?

Код:
// чтение, второй файл так же
$handle = fopen($dir . $minus, 'r');
while (($res = fgets($handle)) != FALSE) {
    if ($res != 0) {
        $array_minus[] = trim($res);
    } else {
        break;
    }
}
fclose($handle);

// сравнение
foreach ($array_source as $value) {
    if (!in_array($value, $array_minus)) {
        $array_result[] = $value;
        $result_string.='
' . $value;
    }
}

file_put_contents($dir . "result.txt", $result_string);
  • Вопрос задан
  • 585 просмотров
Решения вопроса 1
@neol
$handle = fopen($dir . $minus, 'r');
while (($res = fgets($handle)) != FALSE) {
    if ($res != 0) {
        $array_minus[trim($res)] = true; // <- this
    } else {
        break;
    }
}
fclose($handle);
// сравнение
foreach ($array_source as $value) {
    if (!isset($array_minus[$value])) { // <- this
        $array_result[] = $value;
    }
}

file_put_contents("result.txt", implode(PHP_EOL, $array_result));

Две важные строки помечены комментариями.
На двух файлах по 150к строк у меня отработало за 0.333s

PS array_diff, предложенный Денис Акимкин, значительно лучше по читабельности при сравнимой производительности, так что лучше использовать его.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Никак. Это php вам нужен либо что-то типа HHVM либо php7 либо другой язык программирования
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы