[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проверка уникальности чисел
NeonDT
Решаю задание: Сгенерировать 100000 билетов для лотереи с уникальными номерами.
Скрипт генерации написал, заранее поместил сгенерированные номера в файл. Номера имеют по 9 символов. Странный затык получил при попытки проверить уникальность ключей.
Скрипт читает текстовый файл и помещает в массив (строки разделены тегом переноса "\n"). Текстовый файл выглядит примерно так:
HBI109504
FNV841904
LWK956504
DRB898804
DMU974004
XKH436904
BGD406204
После чего функция array_search "по идеи" должна найти пятый элемент
Решая таким способом:
$arr = file('key.txt');
$key = array_search('DMU974004', $arr);
var_dump ($key);

получаю следующий результат: bool(false) . В чём причина, подскажите?
Invis1ble
file('key.txt', FILE_IGNORE_NEW_LINES)


_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

sergeiss
Цитата (NeonDT @ 4.05.2015 - 20:05)
Странный затык получил при попытки проверить уникальность ключей.

Если правильно генерировать массив, то такая проверка не понадобится потом.

// пусть $val - это сгенерированное случайное число
// $arr - массив
// назначаешь вот так в цикле, каждый раз генеря новый $val, и получаешь гарантированную уникальность элемента массива

$arr[ $val ] = $val;

Дальше только размер массива контролируй и всё нормально будет. Без дополнительной проверки на уникальность.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
NeonDT
Подскажи пожалуйста, почему функция array_search не видела массив в прежнем представлении, без обработки аргументом FILE_IGNORE_NEW_LINES? Неужели она при проверке элементов массива читает строки вместе с тегом переноса?
Invis1ble
Цитата (NeonDT @ 4.05.2015 - 20:26)
Подскажи пожалуйста, почему функция array_search не видела массив в прежнем представлении, без обработки аргументом FILE_IGNORE_NEW_LINES? Неужели она при проверке элементов массива читает строки вместе с тегом переноса?

да, только не с тегом, а с символом
а вообще sergeiss выше верно заметил, что лучше сразу озаботиться уникальностью на этапе формирования

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

NeonDT
//генерируем случайный номер
function generate($length = 2) {
$parsing = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$result = '';
$resultat = mt_rand(1000, 9999).date('d');

for ($i = 0; $i <= $length; $i++) {
$result .= $parsing[mt_rand (0, strlen($parsing)-1)];
}
return $result.$resultat;
}
//записываем уникальные номера в файл при каждом проходе
$visit = fopen('key.txt', 'a+');
for ($n=0; $n<1000; $n++) {
fwrite ($visit, generate().$resultat. "\n");

}
fclose ($visit);

Такой сценарий тянет на генерацию именно случайных чисел?))))
sergeiss
Цитата (NeonDT @ 4.05.2015 - 21:35)
Такой сценарий тянет на генерацию именно случайных чисел?))))

Случайных - да. Но не уникальных. У тебя же нигде нет проверки на уникальность. Лучше пиши элементы в массив, как я выше показал. Формирование элементов оставь так, как уже сделал. И когда наберешь нужное количество элементов, то только тогда сбрасывай их в файл.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
NeonDT
И случайны и уникальны получились, проверил! Спасибо всем за советы.
sergeiss
Цитата (NeonDT @ 4.05.2015 - 21:52)
И случайны и уникальны получились, проверил!

Так в итоге как сделал то? smile.gif

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
NeonDT
Сделал элементарно просто, дополнил код парочкой функций, в том числе этой uniqid, а потом проверил с помощью перебора каждого числа.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.