abonnement Unibet Coolblue Bitvavo
pi_31619601
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
chaos is ook een structuur
  zaterdag 22 oktober 2005 @ 02:07:59 #2
30511 Mappy
Piramide van Austerlitz
pi_31619854
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
1
2
3
4
5
6
7
8
9
10
<?php
$query
="select * from tabel;";
$result=pg_query($db,$query);
$lijst=pg_fetch_all($result);
$randomlijst=array_rand($lijst,count($lijst));
foreach(
$randomlijst as $randomitem)
{
   
//doe iets met $lijst[$randomitem];
}
?>

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 ]
  zaterdag 22 oktober 2005 @ 02:18:52 #3
76783 rezjeh
"mañana mañana"
pi_31619999
domdomdom, hieronder goede

[ Bericht 97% gewijzigd door rezjeh op 22-10-2005 02:36:12 (lalalalala) ]
pi_31620024
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..
  zaterdag 22 oktober 2005 @ 02:22:47 #5
30511 Mappy
Piramide van Austerlitz
pi_31620032
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
pi_31620094
quote:
Op zaterdag 22 oktober 2005 02:22 schreef Mappy het volgende:
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
Waarom randomizen ? De enige eis is dat elk getal 1 keer gebruikt mag worden en het niet hetzelfde mag zijn als het record nummer.
  zaterdag 22 oktober 2005 @ 02:29:45 #7
30511 Mappy
Piramide van Austerlitz
pi_31620124
quote:
Op zaterdag 22 oktober 2005 02:27 schreef gelly het volgende:
Waarom randomizen ? De enige eis is dat elk getal 1 keer gebruikt mag worden en het niet hetzelfde mag zijn als het record nummer.
quote:
jzzpr
Hoe kan ik dit met PHP helamaal random laten gebeuren?
Anders had ik ook wel voorgesteld om gewoon i+1 te nemen
pi_31620135
quote:
Op zaterdag 22 oktober 2005 02:29 schreef Mappy het volgende:

[..]


[..]
Ik begrijp eruit dat de TS denkt de getallen random toe te moeten wijzen terwijl dat m.i. helemaal niet nodig is.
  zaterdag 22 oktober 2005 @ 02:32:13 #9
76783 rezjeh
"mañana mañana"
pi_31620152
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
  $ar = array();
  for( $i = 1; $i <= 10; $i++ )
  {
    array_push( $ar, $i );
  }

  for( $i = 1; $i <= 10; $i++ )
  {
    $j = array_rand( $ar );
    unset( $ar[$j - 1] );

    $sql = "UPDATE tabel SET veld = '$j' WHERE id = '$i'";
    mysql_query( $sql );
  }
?>


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
  zaterdag 22 oktober 2005 @ 02:32:13 #10
30511 Mappy
Piramide van Austerlitz
pi_31620153
quote:
Op zaterdag 22 oktober 2005 02:30 schreef gelly het volgende:
Ik begrijp eruit dat de TS denkt de getallen random toe te moeten wijzen terwijl dat m.i. helemaal niet nodig is.
Ik begreep eruit dattie ze random wil doorlopen en die volgorde kennelijk op wil slaan, maar ik wacht nog even op zijn uitleg...
pi_31620170
quote:
Op zaterdag 22 oktober 2005 02:32 schreef rezjeh het volgende:

[ code verwijderd ]

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
Als het random moet is deze manier het beste idd.
  zaterdag 22 oktober 2005 @ 02:34:46 #12
30511 Mappy
Piramide van Austerlitz
pi_31620173
Dat werkt niet als hij de array wil doorlopen via deze variabele... Maar ik heb dus geen idee of jzzpr dat wil...
Want:
quote:
Op zaterdag 22 oktober 2005 02:22 schreef Mappy het volgende:
En daarnaast moet je nog controleren of je niet van 2 -> 4 -> 2 -> 4 -> 2 gaat oid
En daarnaast voldoet het ook mogelijk niet aan:
quote:
jzzpr
het nummer mag niet hetzelfde zijn als het ID van de record.
pi_31620242
edit

[ Bericht 99% gewijzigd door #ANONIEM op 22-10-2005 02:47:28 ]
  zaterdag 22 oktober 2005 @ 03:02:53 #14
76783 rezjeh
"mañana mañana"
pi_31620455
quote:
Op zaterdag 22 oktober 2005 02:34 schreef Mappy het volgende:
Dat werkt niet als hij de array wil doorlopen via deze variabele... Maar ik heb dus geen idee of jzzpr dat wil...
Want:
[..]

En daarnaast voldoet het ook mogelijk niet aan:
[..]
dan doe je een while loopje met als $i == $j nog een keer proberen enzo, TS kan toch zelf ook wel wat doen
  zaterdag 22 oktober 2005 @ 03:10:53 #15
30511 Mappy
Piramide van Austerlitz
pi_31620511
Dit zou wel werken voor jzzpr z'n probleem, maar hij reageert niet erg
1
2
3
4
5
6
7
8
9
$aantal=10;
$lijst=array();
for($i=1;$i++;$i<=$aantal)$lijst[]=$i;
shuffle($lijst);
for($i=0;$i++;$i<$aantal)
{
   $query="update tabel set nummer=".$lijst[($i+1)%$aantal]." where id=".$lijst[$i].";";
   $result=pg_query($db,$query);
}

(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 ]
pi_31620616
*kuch*

[PHP/(My)SQL] voor dummies - Deel 14

Juist voor dit soort dingen is er bovenstaand topic
pi_31620647
quote:
Op zaterdag 22 oktober 2005 03:10 schreef Mappy het volgende:
Dit zou wel werken voor jzzpr z'n probleem, maar hij reageert niet erg
[ code verwijderd ]

(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
Volgens mij pakt Array_rand willekeurige waarden uit een array, dus geen unieke waarden ?
  zaterdag 22 oktober 2005 @ 03:39:08 #18
30511 Mappy
Piramide van Austerlitz
pi_31620715
quote:
Op zaterdag 22 oktober 2005 03:31 schreef gelly het volgende:
Volgens mij pakt Array_rand willekeurige waarden uit een array, dus geen unieke waarden ?
Dan doen we 't met shuffle(). Zie boven
pi_31620754
quote:
Op zaterdag 22 oktober 2005 03:39 schreef Mappy het volgende:

[..]

Dan doen we 't met shuffle(). Zie boven
$lijst[($i+1)\$aantal]

  zaterdag 22 oktober 2005 @ 10:24:48 #20
30511 Mappy
Piramide van Austerlitz
pi_31622248
quote:
Op zaterdag 22 oktober 2005 03:44 schreef gelly het volgende:
$lijst[($i+1)\$aantal]
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 (\=%) ]
pi_31623217
quote:
Op zaterdag 22 oktober 2005 10:24 schreef Mappy het volgende:

[..]

Je kent de modulo-operator niet? Da's een "\".
Je haalt PHP en VB door elkaar.
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
  zaterdag 22 oktober 2005 @ 11:26:04 #22
17137 Sander
Nerds do it rarely
pi_31623230
quote:
Op zaterdag 22 oktober 2005 03:26 schreef JeRa het volgende:
*kuch*

[PHP/(My)SQL] voor dummies - Deel 14

Juist voor dit soort dingen is er bovenstaand topic
Het hoeft niet allemaal speciaal in één topic .
  zaterdag 22 oktober 2005 @ 12:07:12 #23
47819 vbmot
Are those my feet?
pi_31624004
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 (eigenlijk pseudo-random) en dat betekent dus dat je in theorie ook dubbele getallen kunt krijgen.
Looking for hotspots: wardriving or whoredriving?
Personal spam: http://www.kenya2ndhand.com
  zaterdag 22 oktober 2005 @ 16:14:11 #24
30511 Mappy
Piramide van Austerlitz
pi_31629404
quote:
Op zaterdag 22 oktober 2005 11:25 schreef SuperRembo het volgende:
Je haalt PHP en VB door elkaar.
En ik programmeer niet eens in VB "%" dus

BTW, waar is TS?
pi_31632290
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 .
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')