Сохранить в файле 10 последних запросов поиска - получилось слишком громоздко...

Сенсей

Новичок
Сохранить в файле 10 последних запросов поиска - получилось слишком громоздко...

Задача такая - сохранить в файле 10 последних запросов поиска...
Каждый следуюзий запрос для добавляем наверх - а нижний один удаляем.. то есть как бы по кругу что бы было...

вот накатал функцию... но мне она кажется слишком громоздкой для такой задачи.. может есть другие решения?

PHP:
function cache_last_queries($res)
{
	global $prefix, $dbi, $L;
	$data_file = 'data/last_queries.txt';
	$old_file_data = file($data_file); # Old file data
	$lines_count = count($old_file_data);
	$new_file_data[0] = $res; # New file data to write
	if ($lines_count > 10)
	{
		for ($i = 1; $i <= 9; $i++)
		{
		   $new_file_data[$i] = $old_file_data[$i];
		}
		$data = NULL;
		foreach ($new_file_data as $value)
		{
		   $data .= $value."\n";
		}
	}
	else
	{
		$a = 1;
		for ($i = 0; $i < $lines_count; $i++)
		{
		   $new_file_data[$a] = $old_file_data[$i];
		   $a++;
		}
		$data = NULL;
		foreach ($new_file_data as $value)
		{
		   $data .= $value."\n";
		}
	}
	$f = fopen($data_file, 'w');
	flock($f, LOCK_EX);
	fwrite($f, $data);
	flock($f, LOCK_UN);
	fclose($f);
}
+ эта фигня еще и не работает как надо... с алгоритмом у меня что то :(
 

Сенсей

Новичок
Что значит что даст?

Мне нужно сохранять в файле 10 последних запросов в поиске... я не хочу все подряд писать в файл...

Мне нужно.. короткий пример.. в файле:

aaa
bbb
cccc
ddd

Юзер вписал в поиск hhh - после этого файл дуолжен выглядеть так:

hhh
aaa
bbb
ccc

Извращенских решений задачи много.. как например в моем посте... хочется сделать праивльно и с наименьшими затратами ресурсов...

Щас посидел... дошел до

PHP:
	$old_file_data = file($data_file); # Old file data
	$new_file_data[0] = $res; # New file data to write
	$result = array_unique(array_merge($new_file_data, $old_file_data));
Далее нужно оставить первых 10 элементов массива... в случае если элементов больше...
 

WP

^_^
> Мне нужно сохранять в файле 10 последних запросов в поиске...
Зачем это тебе нужно?
PHP:
$fn = 'file.log';
$data = implode("\n",array_slice(array_merge(array('запрос'),explode("\n",file_get_contents($fn))),0,10));
$fp = fopen($fn,'w');
fwrite($fp,$data);
fclose($fp);
 

Сенсей

Новичок
WP
Ну поисковику буду скармливать слова ;)

За код спосибо.. сам бы никогда не додумался =))

Добавил только unique

PHP:
function cache_last_queries($res)
{
	global $prefix, $dbi, $L;
	$fn = 'data/last_queries.txt'; 
	$data = implode("\n",array_unique(array_slice(array_merge(array($res),explode("\n",file_get_contents($fn))),0,10))); 
	$fp = fopen($fn,'w');
	fwrite($fp,$data);
	fclose($fp);
}
Что называется перфект Ж)
 

sage

Новичок
извиняюсь, если ты про
Each line in the resulting array will include the line ending, so you still need to use rtrim() if you do not want the line ending present.
можно, конечно, сделать array_map('rtrim', ...), но от этого код не станет читабельнее
 

WP

^_^
Сенсей
Почему? implode, первый аргумент пустая строка. К запросу приписываешь \n.
 

Сенсей

Новичок
WP
когда юзаю explode("\n",file_get_contents($fn)) - все пучком.. никаких проблем...

если заменить explode("\n",file_get_contents($fn)) на file($fn)

потом при записи в файл вставляются лишние \n, причем с каждым разом их становится все больше...
 
Сверху