2015-05-20 6 views
2

Я пытаюсь прочитать, перетасовать, а затем отобразить содержимое текстового файла. Текстовый файл содержит список кодов (каждый на новой строке - без запятых и т. Д.).Перемешать и отобразить содержимое файла .txt

1490 
1491 
1727 
364 
466 
//... 
783 
784 
786 

Мой код:

$file = fopen("keywords.txt", "r"); 
shuffle($file); 

while (!feof($file)) { 
    echo "new featuredProduct('', ". "'". urlencode(trim(fgets($file))) ."')" . "," . "\n<br />"; 
} 

fclose($file); 

В результате я получаю следующее:

new featuredProduct('', '1490'), 
new featuredProduct('', '1491'), 
new featuredProduct('', '1727'), 
new featuredProduct('', '364'), 
new featuredProduct('', '466'), 
//... 
new featuredProduct('', '783'), 
new featuredProduct('', '784'), 
new featuredProduct('', '786'), 

Я считал, что я должен был бы перетасовать содержимое переменной $file перед циклом через и отображение, и, как вы можете видеть, функция тасования не работает или я не использовал ее правильно?

Я ожидал, что список будет упорядочен намного более случайным образом.

+0

shuffle() для массива не является дескриптором файла – harrrrrrry

ответ

3

Это должно работать для вас:

Просто читать файл в массив с file(), а затем просто использовать shuffle() перетасовать массив. И тогда вы можете цикл над ним и показать его, как это:

<?php  

    $lines = file("test.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); 
    shuffle($lines); 

    foreach($lines as $line) 
     echo "new featuredProduct('', '". urlencode(trim($line)) ."'),\n<br />"; 

?> 

И, как я уже писал выше, shuffle() это перетасовать массив. Но fopen() возвращает ресурс.

+0

yep, 'file()' возвращает массив, который можно перетасовать, 'fopen()' возвращает указатель на файл, поэтому перетасовка не будет работать – RightClick

+0

Спасибо Rizier123. Я вижу, где я ошибся с fopen(). Я действительно ценю твою помощь. Еще раз спасибо. – Hexana

+0

@Hexana Добро пожаловать! Хороший день: D – Rizier123

2

Я думаю, ваша проблема в том, что функция воспроизведения в случайном порядке в PHP должна иметь массив в параметре, как вы можете увидеть здесь: http://www.w3schools.com/php/func_array_shuffle.asp
так что вы должны начать с инициирует массив, добавьте все значения к нему: http://www.w3schools.com/php/func_array_push.asp
затем перетасовать, например:

$file = fopen("keywords.txt", "r"); 
    $a=array(); 
    while (!feof($file)) { 
     array_push($a,urlencode(trim(fgets($file)))); 
    } 
    fclose($file); 
    shuffle($a); 
    // And here you display your array shuffled. 

Надеюсь, я немного помог вам.

+0

Спасибо. Это также полезно и работает с моим примером while. – Hexana