Kies een getal tussen de * en * , behalve *

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mark Honsbeek

Mark Honsbeek

02/05/2012 11:55:15
Quote Anchor link
Hallo,
zit met een vraagje.
Ik wil graag dat er een willekeurig getal wordt gekozen bijvoorbeeld tussen de 1 en de 35. Maar dan wil ik daar 16 van uitsluiten. (Dat mag geen uitkomst zijn)
Dan moet er dus eigenlijk een willekeurig getal worden gekozen tussen de 1 en de 15, en tussen de 17 en de 35.

Die 16 is variabel, dus kan van alles zijn tussen de 1 en de 35. ;)

Ik wil dus zoiets als de titel al zegt: Kies een getal tussen de $min en de $max, behalve $al_in_gebruik.

Is zoiets mogelijk met php?
Groetjes!


P.S. Zoiets als
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
$getal = rand($min,$max);
if($getal == $al_in_gebruik)
{
  $getal1++;
}

is in mijn situatie niet mogelijk. ;)
Gewijzigd op 02/05/2012 12:05:31 door Mark Honsbeek
 
PHP hulp

PHP hulp

23/12/2024 03:23:29
 
- SanThe -

- SanThe -

02/05/2012 12:02:34
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$magniet
= 16;
do
{
    $getal = rand(1, 35);
}
while($getal == $magniet);
echo $getal;
?>
 
Mark Honsbeek

Mark Honsbeek

02/05/2012 12:05:11
Quote Anchor link
Hartelijk bedankt voor de snelle reactie!
Het is duidelijk.

Groetjes

EDIT:

Misschien een noob vraagje;
Wat als ik 2 verschillende $magniet heb?
Dus getal tussen de 1 en de 35, behalve 16 en 12
Gewijzigd op 02/05/2012 12:08:42 door Mark Honsbeek
 
Erwin H

Erwin H

02/05/2012 12:08:34
Quote Anchor link
Je kan ook met behulp van range een array creeeren met alle mogelijke waardes en uit die array een getal kiezen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$min
= 1; $max = 35; $magniet = 16;
$values = array_merge(range($min, $magniet-1)), range($magniet+1, $max));
$getal = $values[rand(0, count($values)-1)];
?>

Het ziet er iets complexer uit dan wat SanThe gaf (en je zou eigenlijk nog een check moeten doen op de waarde van $magniet, zodat het binnen de juiste waardes zit), maar het voordeel is dat je niet in een mogelijk lange loop komt te zitten waarin rand precies elke keer het getal selecteert dat niet mag.
 
Wouter J

Wouter J

02/05/2012 12:09:40
Quote Anchor link
Quote:
Wat als ik 2 verschillende $magniet heb?

Dan zet je die 2 waardes in een array en gebruik je in_array i.p.v. de == statement die je nu hebt.

@SanThe hieronder, ik zou er $mogenNiet van maken ;)
Gewijzigd op 02/05/2012 12:13:16 door Wouter J
 
- SanThe -

- SanThe -

02/05/2012 12:12:09
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$magniet
= array(16, 12);
do
{
    $getal = rand(1, 35);
}
while(in_array($getal, $magniet));
echo $getal;
?>
 
Erwin H

Erwin H

02/05/2012 12:14:37
Quote Anchor link
Maar hoe meer getallen je wilt uitsluiten, hoe groter de kans wordt dat je in een lange loop terecht komt waarin je elke keer de verkeerde waarde selecteert. In dat geval zou ik je zeker aanraden om te kijken naar een oplossing waarbij je gegarandeert een goede waarde vindt bij de eerste poging (zie mijn eerdere oplossing).
 
Mark Honsbeek

Mark Honsbeek

02/05/2012 12:16:19
Quote Anchor link
Het aantal maximale getallen die ik wil uitsluiten is hoogstens 4.
Is het dan wel goed mogelijk om gewoon de oplossing van - SanThe - te gebruiken?
 
- SanThe -

- SanThe -

02/05/2012 12:17:38
Quote Anchor link
Erwin H op 02/05/2012 12:14:37:
Maar hoe meer getallen je wilt uitsluiten, hoe groter de kans wordt dat je in een lange loop terecht komt waarin je elke keer de verkeerde waarde selecteert


Even getest en de tijdsduur is compleet te verwaarlozen. Zelfs in dit scriptje:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$magniet
= range(1, 34);
do
{
    $getal = rand(1, 35);
}
while(in_array($getal, $magniet));
echo $getal;
?>
 
Erwin H

Erwin H

02/05/2012 12:22:08
Quote Anchor link
Totdat je het vaak genoeg doet en je de jackpot raakt. Het is nu eenmaal simpele statistiek dat er een moment komt dat je alleen maar de verkeerde getallen kiest, keer op keer op keer. En met de wet van Murphy in de hand komt dat moment waarschijnlijk ook nog vrij snel....

Dat gezegd hebbende, de oplossing van Santhe is zonder meer de simpelste.
 
- SanThe -

- SanThe -

02/05/2012 12:25:29
Quote Anchor link
@Erwin: Ik ben het geheel met je eens. Mijn laatste scriptje is dan ook een beetje onzinnig. Maar met enkele getallen als uitzondering zal het allemaal wel meevallen.
 
Erwin H

Erwin H

02/05/2012 12:26:33
Quote Anchor link
Het is waarschijnlijk de perfectionist in me :-)
 
- SanThe -

- SanThe -

02/05/2012 12:27:49
Quote Anchor link
Erwin H op 02/05/2012 12:26:33:
Het is waarschijnlijk de perfectionist in me :-)


Haha, ik ken het verschijnsel. Vandaar dat ik het ook volledig met je eens ben.
 
- Mark -

- Mark -

02/05/2012 12:34:10
Quote Anchor link
Niet getest maar zou moeten werken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

    #| Settings :: De lijst met getallen waaruit we er 1 gaan kiezen.

        $numbers = range(1, 35);
        

    #| Settings :: De lijst met getallen die niet gekozen mogen worden.
    
        $not_allowed = array(16, 12, 25);


    #| Dan gaan we nu de lijst met getallen opschonen zodat we weten wat wel en wat niet gekozen mag worden.
    
        $allowed_numbers = array_diff($numbers, $not_allowed);


    #| Getal kiezen.
    
        $selected_number = $allowed_numbers[array_rand($allowed_numbers)];

?>


EDIT: Array rand vergeten in te vullen.
Gewijzigd op 02/05/2012 12:40:43 door - Mark -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.