Jump to content
Sign in to follow this  
WQP

Вывод случайного числа php

Recommended Posts

Здравствуйте, необходимо вывести два неповторяющихся числа. Я это делаю функцией

function getFourRandomNumber ($maxCount){
$numbers = range(0, $maxCount);
shuffle($numbers);
return array($numbers[0], $numbers[1]);
}

но из

range(0, $maxCount);

мне нужно исключить одно число перед отбором, как это правильно реализовать?

Share this post


Link to post
Share on other sites
/* Функция генерации уникальной строки
 * @var length - длина генерируемой последовательности
 * Так как я в своем примере использую префикс в 2 символа,
 * то по молчанию длинна основного ключа: +6 символов
 * @var chars - набор символов, участвующих в генерации
 * в наборе может присутствовать что угодно: 
 * $chars = 'ABCDEFGHJKLMNOPQRSTUVWXYZ1234567890'
 */

function rand_str($length, $chars = '1234567890') {
    // получаем длину строки символов
    $chars_length = (strlen($chars) - 1);

    // Итак, строчка начинается
    $string = $chars{rand(0, $chars_length)};
    
    // Генерируем
    for ($i = 1; $i < $length; $i = strlen($string))  {
        // Берем случайный элемент из набора символов
        $r = $chars{rand(0, $chars_length)};
        
        // Убеждаемся, что соседние символы не совпадают.
        if ($r != $string{$i - 1}) $string .=  $r;
    }
    
    // Вуаля!
    return $string;
}
rand_str(2)

Не решит проблему? :)

Share this post


Link to post
Share on other sites

@mittus, нет. Мне нужно с помощью функции вывести два уникальных числа (функция работает), но при этом удалить определённое число

Share this post


Link to post
Share on other sites

Сделайте проверку на присутствие не нужного числа, если есть то заново сгенерить.

Share this post


Link to post
Share on other sites

Сделайте проверку на присутствие не нужного числа, если есть то заново сгенерить.

 

Логично.

Share this post


Link to post
Share on other sites
function random($min_num=0, $max_num=1024, $ignore=-1) {
    $r = mt_rand($min_num, $max_num);
    if($r == $ignore) return random($min_num, $max_num, $ignore);
    return $r;
}
echo random(0,5,5);

не делайте random(0,0,0), будет бесконечный цикл!

Share this post


Link to post
Share on other sites

Вроде так:

<?php
$outArray = array(); // хранилище для чисел
$max = 10; // максимальное
$min = 0; // минимальное
$count = 2; // количество чисел
$i = 0; // счетчик
while($i<$count){
    $chislo = mt_rand($min, $max); // генерим
    if(!in_array($chislo, $outArray)){ // Проверяем уникальность
        $outArray[$i] = $chislo; // если уникальное, то в массив
        $i++;
    }
}
var_dump($outArray);
?>

Share this post


Link to post
Share on other sites

@r00s, вы не так поняли. Давайте расскажу подробнее.

С помощью этого кода у меня получается массив из двух цифр

function getFourRandomNumber ($maxCount){
$numbers = range(0, $maxCount);
shuffle($numbers);
return array($numbers[0], $numbers[1]);
}

Которые генерируются 

$numbers = range(0, $maxCount);

И из этого массива нужно удалить один элемент.

 

Например: arry(0,1,2,3,4,5,6,7,8,9,10) нужно удалить 6.

Share this post


Link to post
Share on other sites

Я тоже недавно столкнулся с проблемой удаления элемента массива и переформирования,  пришлось функцию писать.

Можешь перебрать элементы форичем или фором и переписать в другой массив без 6 элемента

Share this post


Link to post
Share on other sites

Я тоже недавно столкнулся с проблемой удаления элемента массива и переформирования,  пришлось функцию писать.

Можешь перебрать элементы форичем или фором и переписать в другой массив без 6 элемента

для этого есть unset()

Share this post


Link to post
Share on other sites

 

 


И из этого массива нужно удалить один элемент.

У вас массив из 2-х чисел. Зачем удалять один из элементов из массива, если вы можете просто использовать нужное число?

 

$numbers[0]; или $numbers[1]; (1 и 2 элементы массива)

Share this post


Link to post
Share on other sites

, если все же вы хотите использовать свою функцию, вот вам:

function getFourRandomNumber ($maxCount, $unset=null){
    $numbers = range(0, $maxCount);
    if($unset!==null) unset($numbers[$unset]);
    shuffle($numbers);
    return array($numbers[0], $numbers[1]);
}
print_r(getFourRandomNumber(10, 6));

Share this post


Link to post
Share on other sites
function getFourRandomNumber ($maxCount,$unset){
    $numbers = range(0, $maxCount);
    shuffle($numbers);

    unset($numbers[array_search($unset, array_keys($numbers))]);
    $numbers = array_values($numbers);

    return array($numbers[0], $numbers[1]);
}

Возможно подойдёт

Share this post


Link to post
Share on other sites

@mittus, у меня массив из N чисел просто используются 2 числа. Есть вероятность повтора и её нужно убрать.

@DeimosFobos, не работает :( 

$query_random_all = $query_random_news->query(array('post_type' => 'page','post_parent' => 33));
$query_random_count = count($query_random_all);
			
function getFourRandomNumber ($maxCount, $unset=null){
$numbers = range(0, $maxCount);
if($unset!==null) unset($numbers[$unset]);
shuffle($numbers);
return array($numbers[0], $numbers[1]);
}

$arr_all = getFourRandomNumber($query_random_count,0);

@ethoz, не работает :( 

Share this post


Link to post
Share on other sites

Вообще нечего не работает... Помогите тогда так.

Есть массив

Array ( [0] => 0 [1] => 3 [2] => 1 [3] => 2 [4] => 5 [5] => 4 )

из него нужно удалить элемент [1] => 3

Share this post


Link to post
Share on other sites

Вообще нечего не работает... Помогите тогда так.

Есть массив



Array ( [0] => 0 [1] => 3 [2] => 1 [3] => 2 [4] => 5 [5] => 4 )

из него нужно удалить элемент [1] => 3

Так?

$key = array_search(1, $array);
if ($key !== false)
{
    unset($array[$key]);
}

Share this post


Link to post
Share on other sites

@files, уже пробовал 

function getFourRandomNumber ($maxCount){
$numbers = range(0, $maxCount);

$key = array_search(1, $numbers);
if ($key == 1)
{
unset($numbers[$key]);
}				
				
shuffle($numbers);
return array($numbers[0], $numbers[1]);
}

Share this post


Link to post
Share on other sites

По-моему проблема ТС не в том, что предложенные ф-ции не работают, а в том, что он либо сам не понимает что ему нужно, либо не может этого объяснить.

 

удаление переменных, в том числе элемента массива делается через unset()

Share this post


Link to post
Share on other sites

Вы указывайте что не работает конкретно. У меня работает, иначе не постил бы тут.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...