jzzpr | zaterdag 22 oktober 2005 @ 01:48 | |
Dag allemaal. Ik moet met PHP een database invullen. De database heeft 10 records met allemaal een id (1-10 dus) In iedere record moet ik ergens een nummer (1-10) opslaan. Ieder nummer mag maar een keer gebruikt worden, en het nummer mag niet hetzelfde zijn als het ID van de record. Hoe kan ik dit met PHP helamaal random laten gebeuren? (met andere woorden: iedere record moet naar een andere record verwijzen, er mag geen verwijzing naar zichzelf en er mogen geen dubbele verwijzingen zijn) Hoop dat het een beetje duidelijk is Alvast bedankt, Jzzpr | ||
Mappy | zaterdag 22 oktober 2005 @ 02:07 | |
Heb je niet meer aan zoiets? Alternatief kun je zo'n random volgorde ook opslaan. Er zijn veel dingen makkelijker dan wat je nu wilt, denk ik, maar ik weet niet precies wat het doel is. Wellicht vraag je nu niet naar de oplossing van je probleem, maar naar de uitwerking van wat jij ziet als de oplossing van je probleem ![]()
Dus als je hier niets aan hebt, zeg dan even wat je nou wilt ermee ![]() [ Bericht 25% gewijzigd door Mappy op 22-10-2005 02:24:35 ] | ||
rezjeh | zaterdag 22 oktober 2005 @ 02:18 | |
domdomdom, hieronder goede [ Bericht 97% gewijzigd door rezjeh op 22-10-2005 02:36:12 (lalalalala) ] | ||
#ANONIEM | zaterdag 22 oktober 2005 @ 02:22 | |
Als je een random nummer gaat gebruiken loop je de kans dat je 2 of meerdere keren hetzelfde nummer krijgt he ? Mij lijkt het dat je gewoon vanaf 10 tot 1 telt en daarmee de database vult. Dus record 1 krijgt als waarde 10 etc.. | ||
Mappy | zaterdag 22 oktober 2005 @ 02:22 | |
Dat werkt niet rezjeh. Als je echt wilt doen wat jzzpr vraagt, moet je een lijst van 1-10 randomizen en dan kijken of nergens geldt dat $lijst[n]==n. Indien wel, opnieuw beginnen. Kan natuurlijk, maar het lijkt me zo'n lelijke oplossing voor iets ![]() En daarnaast moet je nog controleren of je niet van 2 -> 4 -> 2 -> 4 -> 2 gaat oid ![]() | ||
#ANONIEM | zaterdag 22 oktober 2005 @ 02:27 | |
quote:Waarom randomizen ? De enige eis is dat elk getal 1 keer gebruikt mag worden en het niet hetzelfde mag zijn als het record nummer. | ||
Mappy | zaterdag 22 oktober 2005 @ 02:29 | |
quote: quote:Anders had ik ook wel voorgesteld om gewoon i+1 te nemen ![]() | ||
#ANONIEM | zaterdag 22 oktober 2005 @ 02:30 | |
quote:Ik begrijp eruit dat de TS denkt de getallen random toe te moeten wijzen terwijl dat m.i. helemaal niet nodig is. | ||
rezjeh | zaterdag 22 oktober 2005 @ 02:32 | |
ik zat met een dom hersenkronkel, dit bedoelde ik gewoon oplopende array maken, daarna random cijfer uit die array, de inhoud ervan gebruiken om de table te updaten, daarna uit de array verwijderen. zo gebruik je niet 2 keer hetzelfde cijfer | ||
Mappy | zaterdag 22 oktober 2005 @ 02:32 | |
quote:Ik begreep eruit dattie ze random wil doorlopen en die volgorde kennelijk op wil slaan, maar ik wacht nog even op zijn uitleg... | ||
#ANONIEM | zaterdag 22 oktober 2005 @ 02:34 | |
quote:Als het random moet is deze manier het beste idd. | ||
Mappy | zaterdag 22 oktober 2005 @ 02:34 | |
Dat werkt niet als hij de array wil doorlopen via deze variabele... Maar ik heb dus geen idee of jzzpr dat wil... Want: quote:En daarnaast voldoet het ook mogelijk niet aan: quote: | ||
#ANONIEM | zaterdag 22 oktober 2005 @ 02:41 | |
edit [ Bericht 99% gewijzigd door #ANONIEM op 22-10-2005 02:47:28 ] | ||
rezjeh | zaterdag 22 oktober 2005 @ 03:02 | |
quote:dan doe je een while loopje met als $i == $j nog een keer proberen enzo, TS kan toch zelf ook wel wat doen | ||
Mappy | zaterdag 22 oktober 2005 @ 03:10 | |
Dit zou wel werken voor jzzpr z'n probleem, maar hij reageert niet erg ![]()
(en de php-tag doet 't niet goed, dus maar even tussen gewone code-tags) In elk geval een mooie oplossing gevonden voor jzzpr z'n probleem ![]() (aangepast, nu met shuffle) [ Bericht 5% gewijzigd door Mappy op 22-10-2005 16:13:42 ] | ||
JeRa | zaterdag 22 oktober 2005 @ 03:26 | |
*kuch* [PHP/(My)SQL] voor dummies - Deel 14 Juist voor dit soort dingen is er bovenstaand topic ![]() | ||
#ANONIEM | zaterdag 22 oktober 2005 @ 03:31 | |
quote:Volgens mij pakt Array_rand willekeurige waarden uit een array, dus geen unieke waarden ? | ||
Mappy | zaterdag 22 oktober 2005 @ 03:39 | |
quote:Dan doen we 't met shuffle(). Zie boven ![]() | ||
#ANONIEM | zaterdag 22 oktober 2005 @ 03:44 | |
quote:$lijst[($i+1)\$aantal] ![]() | ||
Mappy | zaterdag 22 oktober 2005 @ 10:24 | |
quote:Je kent de modulo-operator niet? Da's een "%". Of begrijp je niet wat ik ermee wil? [ Bericht 3% gewijzigd door Mappy op 22-10-2005 16:15:34 (\=%) ] | ||
SuperRembo | zaterdag 22 oktober 2005 @ 11:25 | |
quote:Je haalt PHP en VB door elkaar. | ||
Sander | zaterdag 22 oktober 2005 @ 11:26 | |
quote:Het hoeft niet allemaal speciaal in één topic ![]() | ||
vbmot | zaterdag 22 oktober 2005 @ 12:07 | |
Misschien begrijp ik je verkeerd, maar is het niet makkelijker om het veld in de DB een auto_increment flag te geven. Als je vervolgens een record naar de DB schrijft laat je het id veld open. De DB manager zorgt er dan voor dat de waarde uit het vorige_id_veld+1 in het id veld wordt ingevuld. Random numbers hebben de nare eigenschap dat ze random zijn ![]() | ||
Mappy | zaterdag 22 oktober 2005 @ 16:14 | |
quote:En ik programmeer niet eens in VB ![]() ![]() BTW, waar is TS? ![]() | ||
Wolfje | zaterdag 22 oktober 2005 @ 18:08 | |
Mappy heeft volkomen gelijk. Alle andere methodes hebben volgens mij de eigenschap dat het voor kan komen dat een record zijn eigen id als nummer krijgt, hetgeen strijdig is met de voorwaarde. Dat Mappy wél gelijk heeft kun je het beste inzien door de getalletjes in random volgorde in een kringetje te plaatsen. Het nummer van record met id x is gelijk aan de rechter buur van x in dit kringetje. Zo weet je zeker dat het id altijd verschilt van het nummer. Voor het geval de topic starter er wat aan heeft: de wiskundige kreet die hierbij hoort is 10-cykel ![]() |