Массив с элементами из MySQL - PullRequest
0 голосов
/ 08 июля 2011

Я хочу получить случайные числа с исключениями (например, я хочу получить число от 500 до 550 без 505, 512, 525 и т. Д.).

Я нашел здесь один код, подобный этому:

function randWithout($from, $to, array $exceptions) {
sort($exceptions); // lets us use break; in the foreach reliably
$number = rand($from, $to - count($exceptions)); // or mt_rand()
foreach ($exceptions as $exception) {
    if ($number >= $exception) {
        $number++; // make up for the gap
    } else {
        break;
    }
}
return $number;

}

Если я использую что-то вроде:

$nr = randWithout(500, 550, array(505, 512, 525));

все нормально, но в массив я хочу поместить элементы из mysql, поэтому я создал:

$query = mysql_query("SELECT `site_id` FROM `table` WHERE `user_id`='{$data->id}'");
        $data = array();
        while ($issues_row = mysql_fetch_array($query, MYSQL_ASSOC)) {
        $data[] = $issues_row['site_id'];
        }
        $result = implode(",", $data);

Теперь, если я использую:

$nr = randWithout(500, 550, array($result)); 

, это не работает, поэтому моя проблема в массиве ($ result) Что здесь не так?

Ответы [ 2 ]

1 голос
/ 08 июля 2011

Тим прав, не взвивай результаты в строку.

Но это довольно странная функция для получения случайного числа с исключениями. Попробуйте что-то вроде:

function getRndWithExceptions($from, $to, array $ex = array()) {
    $i = 0;
    do {
        $result = rand($from, $to);
    } while( in_array($result, $ex) && ++$i < ($to - $from) );

    if($i == ($to - $from)) return null;

    return $result;
}

<...>
$nr = getRndWithExceptions(500, 550, $data);  // $data is array
1 голос
/ 08 июля 2011

Я думаю, что проблема:

$result = implode(",", $data);
$nr = randWithout(500, 550, array($result)); 

В то время как вы должны сделать это удалить имплозу и напрямую отправить массив $ data.

$randWithout(500, 550, $data); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...