Jump to content

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


Recommended Posts

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

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

но из

range(0, $maxCount);

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

Link to post
Share on other sites

Есть вопрос? Задай его профессиональным веб-мастерам, SEO и другим специалистам!

/* Функция генерации уникальной строки
 * @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)

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

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);
?>
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.

Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

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

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

Link to post
Share on other sites

 

 


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

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

 

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

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));
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]);
}

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

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, не работает :( 

Link to post
Share on other sites

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

Есть массив

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

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

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]);
}

Link to post
Share on other sites

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

 

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

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.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...