Как вывести несколько рандомных строк из двух txt файлов

Тема в разделе "Как сделать...", создана пользователем surjan, 20 ноя 2018.

Статус темы:
Закрыта.
  1. surjan

    surjan Постоялец

    Регистр.:
    29 авг 2009
    Сообщения:
    84
    Симпатии:
    6
    Всем привет, нужна помощь.
    Есть два списка. Нужно сделать вывод десяти случайных строк из каждого списка. Желательно, чтобы строки не повторялись.

    Результат нужен примерно такой:

    <div>
    Строка списка 1
    Строка списка 2
    </div>
    <div>
    Строка списка 1
    Строка списка 2
    </div>
    <div>
    Строка списка 1
    Строка списка 2
    </div>
     
  2. Black#FFFFFF

    Black#FFFFFF

    Регистр.:
    19 июл 2007
    Сообщения:
    207
    Симпатии:
    134
    PHP:

    <?php

    $eStrings 
    file(__DIR__.'/file.txt');
    $oStrings file(__DIR__.'/file1.txt');

    $iArray = array();

    $maxIndex 5;

    $eStrings array_map('trim',$eStrings);
    $oStrings array_map('trim',$oStrings);


    for(
    $i 0$i $maxIndex$i++){

        echo 
    '<div>';
        echo 
    get_rand_index($eStrings,$iArray);
        echo 
    get_rand_index($oStrings,$iArray);
        echo 
    '</div>';


    }

    function 
    get_rand_index(&$strings,&$iArray){

        
    $string '';
        
    $count sizeof($strings);

        while(
    $count) {

            
    $count sizeof($strings);
            
    sort($strings);

            
    $rKey mt_rand(0,$count-1);

            
    $string $strings[$rKey];
            unset(
    $strings[$rKey]);

            if(!
    in_array($string,$iArray)){
                
    $iArray[] = $string;
                break;
            }


        }

        return 
    $string;

    }

     
    surjan нравится это.
  3. surjan

    surjan Постоялец

    Регистр.:
    29 авг 2009
    Сообщения:
    84
    Симпатии:
    6
    Black#FFFFFF, спасибо за помощь. Появилась еще пара вопросов.

    1) У меня чтение идет из большого файла в несколько мб. И таких обращений к файлу на одной странице несколько. Уже после создания этой темы узнал, что при частых обращениях будет большая нагрузка на хостинг. Возможно ли реализовать чтение не всего файла, а только его небольшой части, чтобы расходовать память по минимуму?


    2) В одном из моих текстовых файлов содержатся ссылки вида:
    Код:
    http://site.com/link.html
    Не соображу как в твой код добавить несколько замен, чтобы получилась кликабельная ссылка:
    Код:
    <a href="http://site.com/links.html">links</a>
    В своем простом варианте делал таким образом:
    Код:
    $data = file("file.txt");
    $var = str_replace(".html", "", $data);
    $var2 = str_replace("http://site.com/", "", $var);
    
    echo '<a href="'.$data.'">'.$var2.'</a>';
     
    Последнее редактирование: 20 ноя 2018
  4. Black#FFFFFF

    Black#FFFFFF

    Регистр.:
    19 июл 2007
    Сообщения:
    207
    Симпатии:
    134
    можно. но при этом раз за разом придется читать файл, пока в нем есть уникальные строки. тебе же нужен случайный порядок. если у тебя файлы до 10 мб, это сильно не нагрузит твой хостинг. если больше, то нужно думать. в любом случае ты можешь кэшировать результаты таких запросов. для работы с файлами построчно см. fgets

    и самое простое: импортируй содержимое в базу данных. а дальше выбирай случайные строки. а ссылку сделай уникальным ключом.

    PHP:
     $is_link true 
    передай для нужного файла.

    PHP:

    <?php

    $eStrings 
    file(__DIR__.'/file.txt');
    $oStrings file(__DIR__.'/file1.txt');

    $iArray = array();

    $maxIndex 5;

    $eStrings array_map('trim',$eStrings);
    $oStrings array_map('trim',$oStrings$is_link true);


    for(
    $i 0$i $maxIndex$i++){

        echo 
    '<div>';
        echo 
    get_rand_index($eStrings,$iArray);
        echo 
    get_rand_index($oStrings,$iArray);
        echo 
    '</div>';


    }

    function 
    get_rand_index(&$strings,&$iArray$is_link false){

        
    $string '';
        
    $count sizeof($strings);

        while(
    $count) {

            
    $count sizeof($strings);
            
    sort($strings);

            
    $rKey mt_rand(0,$count-1);

            
    $string $strings[$rKey];

            if(
    $is_link){

                
    $href str_ireplace(".html"""$string);
                
    $name str_ireplace("http://site.com/"""$href);
                
    $string '<a href="'.$href.'">'.$name.'</a>';
            }

            unset(
    $strings[$rKey]);

            if(!
    in_array($string,$iArray)){
                
    $iArray[] = $string;
                break;
            }


        }

        return 
    $string;

    }

    ?>
     
    Последнее редактирование: 20 ноя 2018
    surjan нравится это.
  5. surjan

    surjan Постоялец

    Регистр.:
    29 авг 2009
    Сообщения:
    84
    Симпатии:
    6
    Black#FFFFFF, в этом скрипте где-то ошибка. Замены не срабатывают и не формируется ссылка. Просто выводится строка из списка. Можешь посмотреть в чем проблема?

    Сам исправил замены.
     
    Последнее редактирование модератором: 11 дек 2018
Статус темы:
Закрыта.