download.bg
 Вход Списание  Новини  Програми  Статии  Форум  Чат   Абонамент  Топ95   Архив 

PHP : Проверка в цикъл за еднаквост на генерирано число?

Автор
Съобщение
programings
Вто, 07.08.12, 18:48
Здравейте!
<?php
// Задаваме примерни 6 числа от последният тираж!
 
$numbers[1] = "14";
$numbers[2] = "17";
$numbers[3] = "20";
$numbers[4] = "34";
$numbers[5] = "35";
$numbers[6] = "46";
 
foreach($numbers as $y) {
// С функцията rand теглим едно число от 1 до 49 !
$x = rand(1, 49);
 
// Ако съвпада числото от масива с това от произволно изтеглените,
// то придаваме съответната стойност на променливата match !
 
if($x==$y) {
 
$match = "<font color='green'>Да!</font>";
 
} else {
 
$match = "<font color='red'>Не!</font>";
 
}
 
// Извеждаме информацията!
echo "
Число от тиража: <b>$y</b>
<br />
Генерирано число: <b>$x</b>
<br />
Съвпадение: <b>$match</b>
<hr />";
 
}
?>

Всичко изглежда наред, но има само един проблем!
Понякога се случва да бъде генерирано едно и също число от функцията rand ( пример ), и така се обезсмисля смисъла на скрипта!

Въпросът ми е как най-елегантно и изчистено да проверя в цикъла дали има съвпадение между генерираните числа от функцията, и ако има такова, то да направя ново генериране, вместо да продължавам така?

Благодаря!

редактиран от programings на 07.08.12 18:48
dreamskill
Вто, 07.08.12, 20:25
Правиш масив с генерираните числа. И при всеки foreach проверяваш дали генерираното число се е генерирало преди.
dreamskill
Вто, 07.08.12, 22:44
Глупости.
<?php
        
$numbers[0] = 14;
$numbers[1] = 17;
$numbers[2] = 20;
$numbers[3] = 34;
$numbers[4] = 35;
$numbers[5] = 46;
$tn = range(1, 49); //създава масив tn с ключ и стойност от 1 до 49 включително. tn е за temporary numbers =D
shuffle($tn); //стойностите и ключовете са разбъркани. Първия ключ на масива вече може да има всяко число като стойност.
for ($i=0; $i<6; $i++) //цикъл!
{
$n[$i]=$tn[$i]; //присвоява... блабла
echo "Число от тиража: <b>".$numbers[$i]."</b>
<br />
Генерирано число: <b>".$n[$i]."</b>
<br />
Съвпадение: <b>";
if ($numbers[$i]==$n[$i])
    echo "<font color='green'>Да!</font>";
else
    echo "<font color='red'>Не!</font>";
    echo "</b><hr />";
}
        ?>

По-кратко от това не знам дали има. По принцип мразя да пиша коментари.

insecteater
Чет, 09.08.12, 13:46
Според алгоритъма който си представил, поредността на числото също е от значение. Например ако в началния масив имам 14 на първа позиция, но случайно изтегля 14 от третия опит, тогава нямам да имам съвпадение, Това ли е наистина целта?
<?php
$numbers = array(14, 17, 20, 34, 35, 46);
 
//Генерираме 6 произволни числа в диапазона от 1 до 49
$othernumbers = range(1, 49);
shuffle($othernumbers);
$othernumbers = array_slice($othernumbers, 0, 6);
 
foreach($numbers as $key=>$value) {
 
$match = ($value == $othernumbers[$key])?'<font color="green">Да!</font>':'<font color="red">Не!</font>';
 
 
 // Извеждаме информацията!
echo "
Число от тиража: <b>$value</b>
<br />
Генерирано число: <b>$othernumbers[$key]</b>
<br />
Съвпадение: <b>$match</b>
<hr />";
 
}
 
?>

programings
Чет, 09.08.12, 21:17
Да!

Съпоставя се число с число, това е идеята!

Коментар

за нас | за разработчици | за реклама | станете автори | in english  © 1998-2024   Experta Ltd.