2015-04-17 4 views
2

Я хочу, чтобы создать случайное число с помощью RAND() где число! = К (516, например)рандов() число Где его! = Определенное число

, например, если у меня есть номер «5» в базы данных, и я хочу, чтобы вставить случайное число = 5.

+0

Не было бы суперэффективным, но вы могли бы просто сгенерировать число в бесконечном цикле и только вырваться из него, если сгенерированное число! = Ваш исключенный номер. Я не могу придумать способ прямого генерации случайного числа, за исключением определенного числа. – Carcigenicate

+3

Это звучит подозрительно, как проблема [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Пожалуйста, объясните, почему номер должен быть «случайным». –

+0

Я бы подумал, что инструкция do/while будет хорошо работать здесь. Нужен еще примерный код. – Twisty

ответ

1

Используйте массивы и ранд:

$ran_begin = array(1,2,3,4,6,7,8,9);//not contain 5 and 0 
$ran = array(0,1,2,3,4,5,6,7,8,9); 

$random_value = ''; 
$k = array_rand($ran_begin); 
$v = $array[$k]; 
$random_value = $random_value.$v; 

$k = array_rand($ran); 
$v = $array[$k]; 
$random_value = $random_value.$v; 


$k = array_rand($ran); 
$v = $array[$k]; 
$random_value = $random_value.$v; 

..................... .........

+1

well thats inefficent –

+0

и неэффективен. –

2

Одно решение ...

$disallow = 5; 
$random_value = $disallow; 
while($random_value == $disallow) { 
    $random_value = rand(); 
} 
echo $random_value; 

Документация по rand, http://php.net/manual/en/function.rand.php.

+0

Знаете ли вы что-то о [tag: python]? Я никогда не думал, как ваш ответ, иначе я прочитал несколько уроков о Python! – SaidbakR

+1

Нет, я не очень много размышлял о мире питона. – chris85

1

этот исключает все значения, заданные в массиве.

$excluded_nums = array(....); 
$val = null; 
do { 
    $val = rand(); 
} while (in_array($val, $excluded_nums)); 

, но вы можете быть заинтересованы в изучении другой метод, возможно, openssl_random_pseudo_bytes

1

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

Вместо генерации чисел, рекомендуется, чтобы генерировать непрозрачный идентификатор, такие как UUID v4, что предназначается, чтобы быть непредсказуемыми (при условии, соответствующий источник энтропии используется); Пример идентификатор:

de305d54-75b4-431b-adb2-eb6b9e546014 

Я создал функцию, чтобы сгенерировать этот идентификатор в качестве earlier answer.

У меня есть список номеров в базе данных, и я хочу, чтобы сгенерировать код! = Для всех из них

Подход, который я рекомендовал бы добавить UNIQUE constraint на идентификатор и написать цикл, который генерирует новый идентификатор и пытается его вставить; он заканчивается, когда вставка не вызывает ошибку ограничения; чтобы поставить шансы в перспективе, вы, скорее всего, попадете в метеорит, чем попадете в двойное значение.

Смежные вопросы