SHARE
TWEET

Untitled

a guest Feb 14th, 2020 71 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2. /*//Создание тестового файла размером 10гб
  3. $fp = fopen('test.txt', 'w+b');
  4. for ($index = 1; $index <= 250000000; $index++) {
  5.     $text = "ключ{$index}\tзначение{$index}\x0A"; // Исходная строка
  6.     $write = fwrite($fp, $text); // Запись в файл
  7. }
  8. if ($write) {
  9.     echo 'Данные в файл успешно занесены.';
  10. }
  11. else {
  12.     echo 'Ошибка при записи в файл.';
  13. }
  14. fclose($fp);*/
  15.  
  16. $s = microtime(true);
  17.  
  18. function binarySearch($filename, $key)
  19. {
  20.  
  21. $start = 0;
  22. $end = filesize($filename);
  23.  
  24.     while ($start < $end) {
  25.         $middle = $start + floor(($end - $start) / 2);
  26.         $lines = explode("\x0A", file_get_contents($filename, FALSE, NULL, $middle, 4000));
  27.         $params = [];
  28.         foreach ($lines as $line) {
  29.             $params[] = explode("\t", $line);
  30.         }
  31.  
  32.         $result = array_filter($params, function($innerArray) use ($key) {
  33.             return ($innerArray[0] == $key); //Поиск по первому значению
  34.         });
  35.  
  36.         if ($result) {
  37.             foreach ($result as $value) {
  38.                 return print_r($value[1]);
  39.             }
  40.         } else {
  41.             $strnatcmp = strnatcmp($params[1][0], $key);
  42.         }
  43.  
  44.         if ($strnatcmp > 0) {
  45.             $end = $middle - 1;
  46.         } elseif ($strnatcmp < 0) {
  47.             $start = $middle + 1;
  48.         }
  49.     }
  50. echo 'undef';
  51.  
  52. }
  53. binarySearch('test.txt', "ключ212365");
  54.  
  55. echo "\nВремя выполнения скрипта: " . round(microtime(true) - $s, 4) . ' сек.';
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top