как вывести случайные строки из файла

Статус
В этой теме нельзя размещать новые ответы.

verfaa

Профессор
Регистрация
29 Янв 2007
Сообщения
416
Реакции
49
Есть файл с кеями. Кейворды по одному на строку, кеев много.
Мне нужно вывести заданное количество случайных кеев из файла.

Как я понимаю, нужно занести файл в массив и добавить этот массив в переменную.

Код:
$filewithkeys = file(d:\cars\bmw.txt);

А как теперь вывести допустим 50 случайных кеев из массива $filewithkeys в переменную $randomkeys ?
 
Есть файл с кеями. Кейворды по одному на строку, кеев много.
Мне нужно вывести заданное количество случайных кеев из файла.
Как я понимаю, нужно занести файл в массив и добавить этот массив в переменную.
Код:
$filewithkeys = file(d:\cars\bmw.txt);
А как теперь вывести допустим 50 случайных кеев из массива $filewithkeys в переменную $randomkeys ?
PHP:
$size = sizeof($filewithkeys);
$used_numbers = array();
$randomkeys = array();
for ($i=0; $i<50; $i++) {
	//это чтобы не было повторов
	$number = rand(0, $size);
	while (arry_search($number, $used_numbers) !== false) $number = rand(0, $size);
	$used_numbers[] = $number;
	//==========================
	$randomkeys[] = $filewithkeys[$number];
}
 
считаю, что для получения случайного элемента массива, лучше использовать соответствующую функцию array_rand()
PHP:
$key=array_rand($filewithkeys,50);
for ($i=0; $i<50; $i++) {
echo $filewithkeys[$key[$i]].'<br>';
}
 
PHP:
$keys = file('key.txt');
shuffle($keys);
$random_keys = array_slice($keys, 0, 50);
foreach($random_keys as $key){
    echo $key.' ';
}
 
polyetilen
зачем писать на не сильно быстром PHP преднамерено более медленные скрипты?
При выборке k элементов из массива размерностью N, моим способом на это уйдет O(k), а в вашем на перемещивание уйдет O(N), и на выборку O(k)
O(k)<O(N)+O(k)
Так что при больших массивах, и небольших выборках, ваш способ просто пальба из пушки по воробьям
 
Т.к. сообщение с ответом потерялось, подскажите ещё раз как быть в случае, если после того, как случайные кеи выбраны нужно после каждого 3-го кея поставить запятую, после каждого 5-го точку, после каждого 8-го двоеточие, после 12-го тег <br />. И чтобы первый кей в выборке начинался с большой буквы и все кеи которые будут идти после кея с точкой тоже начинались бы с большой буквы. Таким образом я хочу получить некое подобие с текстом :)
 
Т.к. сообщение с ответом потерялось, подскажите ещё раз как быть в случае, если после того, как случайные кеи выбраны нужно после каждого 3-го кея поставить запятую, после каждого 5-го точку, после каждого 8-го двоеточие, после 12-го тег <br />. И чтобы первый кей в выборке начинался с большой буквы и все кеи которые будут идти после кея с точкой тоже начинались бы с большой буквы. Таким образом я хочу получить некое подобие с текстом :)
интересно, зачем было терять этот пост. и почему вы его не скопировали себе пока видели?))
придется снова сочинять:
PHP:
<?
$keys=file('key.txt');
$count_key=50;//количество кеев
$znaki=array(//через сколько слов знак ставить
	//в порядке важности. то есть сперва будет применятся первое правило, а остальные соотвественно нет, в случае удачи
	//лучше всего по уменьшению частоты расставить
	'<br/>'=>12,
	': '=>8,
	'. '=>5,
	', '=>3,
	' '=>1 //не удалять.означает, что если не был поставлен знак препинания, то будет пробел поставлен
	);
$ucfirst=array('. '=>0,'<br/>'=>0);//после какого знака увеличивать надо
$key_rand=array_rand($keys,$count_key); 
$str=(ucfirst($keys[$key_rand[0]]).' ');
for($i=1;$i<$count_key;$i++)
	{
	$t=true;
	foreach($znaki as $key=>$value)
		{
		if($i%$value==0)
			{
			$str.=($key.(isset($ucfirst[$key])?ucfirst($keys[$key_rand[$i]]):$keys[$key_rand[$i]]));
			$t=false;
			break;
			}
		} 
	}
echo $str;
?>
 
  • Нравится
Реакции: zloi
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху