PHP rand () ... получить истинные результаты 50/50? - PullRequest
8 голосов
/ 18 марта 2009

Я хочу запустить функцию, которая имеет 2 разных результата, но я хочу, чтобы каждый результат был действительно 50%. Я предполагаю, что рандом (0,1) - это путь, но мне любопытно, может ли это быть в пользу одного над другим. Каков наилучший способ получить результат 50/50?

Спасибо.

EDIT: спасибо, ребята, я не хочу, чтобы это было случайным, хотя, я хочу, чтобы результат был 101010101, а не 111001101. Может быть, я должен просто обновить базу данных с последним выводом значения и затем вернуть противоположное?

EDIT2: Хорошо, я сожалею, что мое последнее редактирование вводило в заблуждение. Я вызываю функцию только один раз для каждого пользователя и назначаю это значение в виде файла cookie для пользователя. Я хочу, чтобы каждый посещающий пользователь получил 1 или 0 в заказе 1010101.

Ответы [ 15 ]

0 голосов
/ 18 марта 2009

Если вы серьезно хотите, чтобы он возвращал противоположное значение на каждой итерации ...

function flip() {
    static $truthiness = false;
    $truthiness = !$truthiness;
    return $truthiness;
}

, который должен возвращать истину, ложь, истину, ложь, истину и т. Д ...

Конечно, это работает, только если интерпретатор PHP остается в памяти между вызовами.

Кроме того, если вы не знаете, что делает ключевое слово static, см. Справочную запись PHP по переменная scope .

0 голосов
/ 18 марта 2009

, если вы просто хотите чередовать 1 и 0:

$n = 0;
$myval = ($n==1 ? $n=0 : $n=1);
0 голосов
/ 18 марта 2009

, хотя это псевдослучайный генератор, он никогда не достигнет 50/50 ... читать что-н. о генераторах случайных чисел здесь: http://www.robertnz.net/true_rng.html

0 голосов
/ 18 марта 2009

Псевдослучайность никогда не может быть истинной случайностью. Каждое вычисление случайных чисел на основе начального числа или с помощью других средств имеет определенный уровень предопределения, который может возникнуть или не появиться очевидным образом - например, мини-шаблоны. Лучшее, на что вы можете надеяться, это почти 50/50.

0 голосов
/ 18 марта 2009

возможно вы можете попробовать mt_rand (0,1) вместо rand (0,1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...