четене от .txt

bubust

Registered
Весели празници първо да пожелая! :)

Имам следното кодче:

PHP:
<?php
 $f = file( 'example.txt' );
 for ( $i = 0; $i < 20; $i++ )
 {
  echo '<div align="center" class="print">' . $f[ rand( 0, count( $f ) - 1 ) ] . "</div>";
 }
 ?>

Сигурно сте видяли, че чете от файл и генерира 20 резултата. Проблем, е че понякога тези резултати се дублират.

Може ли някой да напише функцийката да не ги дублира, ами да вади 20 уникални резултата?

Различните резултати от файла са на нов ред, ако това има значение. :)
 
Зависи какво искаш точно да направиш.

За да извадиш само уникални резултати от файла, можеш да ползваш:
Код:
$f = array_unique(file( 'example.txt' ));

Ако искаш да извадиш разбъркано всички уникални резултати:

Код:
$f = array_unique(file( 'example.txt' ));
shuffle($f);

echo implode('<br />', $f);

http://php.net/manual/en/function.array-unique.php
 
Не желая всички, а само 20 произволни от всички, които вътре в себе си да не се повтарят. :)

В самия файл example.txt няма 2 еднакви записа.
 
Записвай в един масив всички изтеглени елементи и проверявай. Ако новото изтеглено го има в този масив, пак тегли, докато не се падне някой който не е в него.След това се изкарва резултат и номера на елемента да се пази в масива. И това да е в цикъл който ще се върти докато примерно $i = 20... :?)
 
Код:
$array = array_unique(file('example.txt'));
shuffle($array);
$array = array_slice($array, 0, 20);

foreach($array as $data)
{
    echo $data;
}

Ето пример:

http://codepad.viper-7.com/4f97Qr
 
Благодаря на всички включили се в темата!

На друго място ми помогнаха със следния код, който също работи:

PHP:
<?php
$f = file( 'example.txt' );
$already_generated = array();
for ( $i = 0; $i < 20;  )
{
    $random_line = $f[ rand( 0, count( $f ) - 1 ) ];
    if(!in_array($random_line, $already_generated)){
        echo '<div align="center" class="print">' . $random_line . "</div>";
        $i++;
    }
$already_generated[] = $random_line;
}
?>
 

Back
Горе