Как сделать уникальную выборку имени из файла, без повтора?

Тема в разделе "Как сделать...", создана пользователем асс, 26 мар 2012.

  1. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    749
    Симпатии:
    220
    Добрый день товарищи.
    Суть такова, есть код в нутри цикла



    PHP:
    for($i=0;$i 100;$i++){  
    $file=array();
    $file=file('Gen/city.txt');
    $size_temp=sizeof($file);
    $city$file[mt_rand(0,$size_temp-1)];
    }


    так вот у меня в файле есть 500 строчек, как мне сгенерировать уникальный список
    из 100 слов чтоб небыло повторов?

    В общем надо чтоб все 100 $i < 100 запусков цикла выдавали только новое уникальное имя, из имеющихся( 500 или 1000 тут нет ограничения строк.)


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


    Или посоветуете что нить боле разумное


    Использование базы пока не расматриваю.
    Благодарю за советы.
     
  2. recasher2k12

    recasher2k12

    Регистр.:
    19 фев 2012
    Сообщения:
    156
    Симпатии:
    78
    PHP:
    $file=file('Gen/city.txt');
    for(
    $i=0;$i<100;$i++){
    $rndCity array_splice $file rand(0,length($file)-1), 1);
    echo 
    $rndCity[0];
    }
    PS Не проверял. Но что-то вроде этого
     
  3. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    749
    Симпатии:
    220
    Строка $rndCity = array_splice ( $file , rand(0,length($file)-1), 1); Parse error: syntax error, unexpected ';' in Y:\home\x.php on line 7
    ошибка
     
  4. recasher2k12

    recasher2k12

    Регистр.:
    19 фев 2012
    Сообщения:
    156
    Симпатии:
    78
    странно, такое впечатление, что несоответствие открывающих/закрывающих скобок. Но не могу найти как конкретно...
    попробуй функцию length() заменить на sizeof() или count()
    заработался, функции length() в списке стандартных не существует
     
  5. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    749
    Симпатии:
    220
    length не подсвечивается, тоесть работает как то не так
    обычно функции подсвечиваются у меня.

    recasher2k12, точно проблема в length он не работает.
    А ехе походу я накосячил тем что и запись и сбор строк делал в нутри цикла.

    тоетсь тут цикл $sh .=" тут текст и тут же запись.

    Надо был вынести запись за пределы цикла
    или убрать .

    Щас попробую
     
  6. recasher2k12

    recasher2k12

    Регистр.:
    19 фев 2012
    Сообщения:
    156
    Симпатии:
    78
    Ну принцип там прост как два пальца:
    До цикла он читает файл в массив.
    В цикле он удаляет из массива один рандомный элемент функцией array_splice(), которая в свою очередь возвращает удаленный элемент. Его мы и используем.
    Так как в массиве этого элемента уже нет, повторно он в выдачу не попадет.
     
  7. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    749
    Симпатии:
    220
    Но разве он помнит при втором проходе цикла то что было при первой итерации

    Код:
    for($i=0;$i<100;$i++){
     
    $filme=file('Gen/imena_mushin.txt');
    $rndCitym = array_splice ( $filme , rand(0, sizeof($filme)-1), 1);
    $nik= $rndCitym[0];
     
    }
     
  8. recasher2k12

    recasher2k12

    Регистр.:
    19 фев 2012
    Сообщения:
    156
    Симпатии:
    78
    Так не помнит.

    А вот так запомнит:
    Код:
    $filme=file('Gen/imena_mushin.txt');
     
    for($i=0;$i<100;$i++){
    $rndCitym = array_splice ( $filme , rand(0, sizeof($filme)-1), 1);
    $nik= $rndCitym[0];
     
    }
     
    асс нравится это.
  9. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    749
    Симпатии:
    220
    Отлично, то что надо. Благодарю Вас за помощь.
    По сути у меня тож уники давал но там проблема была в том что он не правильно набирал

    выходило типа так
    12
    1235
    123456
    1234567

    Тепрь нормально.