|
0 / 0 / 0
Регистрация: 30.05.2011
Сообщений: 16
|
||||||
Случайный выбор уникальных строк из файла без занесения последнего в массив24.02.2016, 18:58. Показов 4888. Ответов 9
Метки нет (Все метки)
Приветствую!
К сожалению, использование больших массивов - это лишняя трата ОЗУ. Как я понимаю, взяв в такой массив файл размером 25 МБ, PHP зарезервирует под него все 50. А если файл ещё больше? В общем, хотелось бы работать с такими файлами напрямую, т.е. без предварительного занесения их в массивы. Базы данных не рассматриваю ![]() Вот код, который берёт 9 случайных строк из файла и выводит их на экран:
Единственное, что приходит в голову - это создание массива, кол-во ключей которого равно кол-ву строк в файле. Все значения в этом массиве, разумеется, равны 0 (для экономии ОЗУ). Но если убрать из такого массива очередной элемент, после чего отсортировав его, это никак не скажется на строках самого файла. Далее, лезут мысли типа зацикливания mt_rand до тех пор, пока очередная взятая строка не будет уникальной среди уже взятых ранее, но это реально бред, а если нужно взять 900 тыс. уникальных строк из 1 млн.? Добавлено через 15 минут Забыл отметить: все строки в файле уникальные сами по себе.
0
|
||||||
| 24.02.2016, 18:58 | |
|
Ответы с готовыми решениями:
9
Случайный выбор строки из файла |
|
669 / 640 / 335
Регистрация: 26.04.2014
Сообщений: 2,122
|
|
| 24.02.2016, 19:44 | |
|
sMario, Может быть вам подойдёт функция array_unique?
0
|
|
|
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
|
||
| 24.02.2016, 19:47 | ||
|
Тем более этот скрипт что, будет работать как демон? Или все-таки он будет запускаться, выполняться, и тут же прекращаться? Тогда в этом точно нет смысла.
0
|
||
|
Hello Kitty
|
||||||||||||
| 24.02.2016, 19:58 | ||||||||||||
Сообщение было отмечено sMario как решение
Решение![]() впрочем это легко сделать и по вашему условию
2
|
||||||||||||
|
0 / 0 / 0
Регистрация: 30.05.2011
Сообщений: 16
|
||||
| 24.02.2016, 20:25 [ТС] | ||||
|
Может я конечно чего-то не понимаю, но мне всё это видится именно в таком ключе Поправьте, если не согласны.
0
|
||||
|
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
|
|||||||||||||
| 24.02.2016, 20:48 | |||||||||||||
![]() Занять 50 мегабайт ОЗУ на 100 мс это вообще незаметно произойдет. А вот как именно будет это происходить - это другой вопрос. Выделить 50 МБ ОЗУ и освободить их через 100 мс - это вообще фигня. А Вы те же самые 50 МБ прогоняете, только не за 1 раз, а за 1000000 (или сколько там у Вас строк в этих 50 МБайтах). Да и в итоге Вы этот файл 2 раза прогоняете, судя по скрипту. Вот такими манипуляциями действительно можно процессор подгрузить, это увеличит время исполнения. Ну я не знаю как еще понятнее объяснить. Представьте, что Вам сложнее, 1 раз поднять 10 килограмм и тут же бросить, или 10000 раз поднять по 1 грамму? Тут то же самое.Добавлено через 1 минуту
Да и вообще все функции с работой с файлами следует сводить к минимуму. Не нужно файл 2 раза перечитывать. Я бы начал так
0
|
|||||||||||||
|
Hello Kitty
|
|||||||
| 24.02.2016, 20:51 | |||||||
|
при count(file("file.txt")); php выкачает весь файл, потом разобьет его на на строки, потом создаст асоциативный(а они все же такие…) массив и если строк много может подпрыгнуть память. если строк очччень многа будет своп и count(file("file.txt")); отработает медленней
0
|
|||||||
|
0 / 0 / 0
Регистрация: 30.05.2011
Сообщений: 16
|
||
| 24.02.2016, 21:26 [ТС] | ||
Я же объясняю, что разница между непосредственной работой с файлом и с предварительным его прогоном через массив (file('файл')) составляет сотые секунды, но использование массива дополнительно съедает и ОЗУ в двойном размере от размера самого файла. И не важно, сколько раз цикл гонял по файлу, главное, что скрипт использовал процессор одно и то же время, но во втором случае ещё и ОЗУ сожрал. Может мы о разных вещах толкуем? ![]() WhiteMind А что в вашем скрипте означают записи return [] и result = [] ? И вообще, честно говоря, думал что задача как-то проще решается. Очень уж мудрёно выходит. Может и правда смириться с неким жором ОЗУ в пользу простоты кода? Не люблю код, в котором потом сложно разобраться, если нужно. Не все мы математику в школе хорошо учили
0
|
||
|
0 / 0 / 0
Регистрация: 30.05.2011
Сообщений: 16
|
||
| 24.02.2016, 22:20 [ТС] | ||
|
0
|
||
| 24.02.2016, 22:20 | |
|
Помогаю со студенческими работами здесь
10
Случайный выбор файла из ресурсов
Как обойтись без метода Свернуть() для подсчет уникальных строк в ТЗ Случайный выбор определённых слов при копировании одного файла в другой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|