Kies een getal tussen de * en * , behalve *
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
is in mijn situatie niet mogelijk. ;)
Gewijzigd op 02/05/2012 12:05:31 door Mark Honsbeek
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
Code (php)
1
2
3
4
5
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)];
?>
$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.
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
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).
Is het dan wel goed mogelijk om gewoon de oplossing van - SanThe - te gebruiken?
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:
Dat gezegd hebbende, de oplossing van Santhe is zonder meer de simpelste.
@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.
Het is waarschijnlijk de perfectionist in me :-)
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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)];
?>
#| 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 -