venetu
Мой дом здесь!
- Регистрация
- 28 Мар 2007
- Сообщения
- 745
- Реакции
- 273
Интересная идея, а можешь описать как данный код работает?
Переходим fseek() в случайное место файла (скорее всего попадаем куда-то в середину строки). Читаем fgets() до конца строки. Читаем следующую строку. Все.
Отдельно еще проверка если мы при первом fseek() попали в последнюю строку - тогда выводим первую.
Еще есть идея, перемешать строки в файле и просто брать строку а потом ее удалять, как думаете это будет менее ресурс затратно?
Удалять из файла - нереально. Это тебе ни один кеш с отложенной записью не позволит быстро читать-писать. Будут тормоза.
Если надо выбирать каждый раз уникальную строку, т.е. чтобы строки не повторялись - придется строить массивчик для "уже выбранных" и заносить туда md5(), и при следующей выборке проверять сначала этот массивчик. Выбирать при этом желательно десятую часть от того что есть в файле, потому что если надо выбрать ВСЕ строки, то на последних этапах такая штука будет работать все медленнее и медленнее.
С хранением в памяти все, как обычно, очень просто:
PHP:
class randstr {
var $arr;
function randstr($file) {
$this->arr = file($file);
shuffle($this->arr);
}
function get() {
return array_pop($this->arr);
}
}