Avatar billede bars Nybegynder
27. august 2007 - 15:39 Der er 12 kommentarer og
1 løsning

oprette numre og udtrække tilfældige deraf

Hej jeg er lidt rusten i php, da det er et stykke tid siden jeg har skrevet noget brugbart. så jeg prøver at søge lidt hjælp her.

Jeg vil gerne have en liste (et array) af tal jeg definerer fra og til i inputbokse. Altså hvis jeg vælger 1 og 100 får jeg en kommasepereret liste med tallene fra 1 til 100.

Dernæst vil jeg gerne have et inputfelt mere hvor jeg kan trække nogle tal ud af listen ovenfor.
Dvs at jeg hart 3 input felter, et til startnr, et til slutnr og et til antal af numre som skal ekskluderes. Hvis jeg igen vælger 1 og 100 og 10 i den sidste - så kommer tallene fra 1 til 100 med 10 tilfældige tal i en anden komasepereret liste som ikke er med i den første...

Den sidste ting jeg gerne vil have er at man kan dividere antallet af tal mellem start og slut med et nyt tal man indtaster, og det antal man indtaster er også den mængde af lister tallene bliver skrevet ud i.

Håber det er til at forstå hvad jeg skriver og at der er nogen som gider at hjælpe mig.
Avatar billede olebole Juniormester
27. august 2007 - 15:53 #1
<ole>

$a = range(1, 100);
array_shuffle($a);
$sA = implode(",", $a);
print $sA;

- men resten er jeg ikke helt med på  :)

/mvh
</bole>
Avatar billede olebole Juniormester
27. august 2007 - 15:54 #2
Sorry:

$a = range(1, 100);
shuffle($a);
$sA = implode(",", $a);
print $sA;
Avatar billede hmortensen Nybegynder
27. august 2007 - 16:02 #3
Altså i ovenstående eksempel skal der kun være 90 blandede tal i den første liste, og de sidste 10 i den næste?
Avatar billede olebole Juniormester
27. august 2007 - 16:06 #4
- måske, det kommer anpå, hvad det er, spørgeren skriver  :)
Avatar billede bars Nybegynder
27. august 2007 - 16:07 #5
jeg prøver lige at forklare lidt nærmere:
Hvis jeg har en liste fra 1 til 100 og en "udtrækker" på 10. Så vil jeg gerne have en liste skrever ud i numerisk rækkefølge fra 1 til 100 (men selvf kun 90 numre) hvori der er trukket 10 tilfældige tal ud som bliver udskrevet på en anden liste i numerisk rækkefølge.
Avatar billede bars Nybegynder
27. august 2007 - 16:10 #6
eks på et resultat med tallene fra 1 til 10 med en udtrækker på 3:
1,2,4,5,6,8,10
3,7,9
Avatar billede zynzz Praktikant
27. august 2007 - 16:38 #7
Måske:

<?
//Tjekker om felterne er sat
if(isset($_POST['opretliste']) && is_numeric($_POST['start']) && is_numeric($_POST['slut']) && is_numeric($_POST['antal'])){

// Tjekker at slut er større end start eller lig med
if($_POST['slut'] >= $_POST['start']){

// Tjekker at slut er større end antal eller lig med
if($_POST['slut'] >= $_POST['antal']){

$xliste = range($_POST['start'], $_POST['slut']);
shuffle($xliste);
$i = 0;
echo "Liste 1:<br>";
while ($i <= $_POST['antal']) {
echo $i.".  ". $xliste[$i] ."<br>";
$i++;
}
echo "Liste 2:<br>";
while ($i <= $_POST['slut']-1) {
echo $i.".  ". $xliste[$i] ."<br>";
$i++;
}

}else{
echo "Antal kan ikke være større end slut";
}
}else{
echo "Slut skal være større eller lig med start";
}
}
else{
echo "Udfyld alle felterne under, og det skal være skrevet med tal";
}
?>
<form method="POST" action="">
    <p>Start:<input type="text" name="start" size="20"></p>
    <p>Slut:<input type="text" name="slut" size="20"></p>
    <p>Antal:<input type="text" name="antal" size="20"></p>
    <p><input type="submit" value="Udfør" name="opretliste"></p>
</form>
Avatar billede olebole Juniormester
27. august 2007 - 18:01 #8
<?
function getLists($nStart, $nEnd, $nCount) {
    $a = range($nStart, $nEnd);
    shuffle($a);
    $aA = array();
    for ($i=0; $i<$nCount; $i++) $aA[$i] = array_pop($a);
    sort($a);
    sort($aA);
    return array($aA, $a);
}

$aLists = getLists(1, 100, 10);

// Brug resultatet på én eller anden måde
for ($i=0,$j=count($aLists[0]); $i<$j; $i++) {
    print "<div>".$aLists[0][$i]."</div>";
}
print "<hr>";
for ($i=0,$j=count($aLists[1]); $i<$j; $i++) {
    print "<div>".$aLists[1][$i]."</div>";
}
?>
Avatar billede bars Nybegynder
28. august 2007 - 08:29 #9
zynzz: din liste kommer ikke i numerisk rækkefølge og der skal ikke stå linjenr ud for tallene.
Avatar billede bars Nybegynder
28. august 2007 - 08:35 #10
olebole: dit script virker ligesom jeg gern vil have den til...  vil du prøve at integrere den division jeg skrev i første indlæg, jeg prøver lige at forklare lidt nærmere.

jeg har nu min liste på 90 numre med tallene 1 til 100, hvis jeg har en divider på 4 så udskrives listen med de første 23 tal og derefter en ny liste med de næste 23 og de næste 22 tal og de sidste 22 tal. (det er antaget at divisionen giver heltal da 90/4 er 22,5 - således at forskellen på antallet af tal kun er 1 i antallet af lister)
Avatar billede hmortensen Nybegynder
28. august 2007 - 19:08 #11
Her er en metode hapset i php manualen som jeg tror kan bruges:
function partition( $list, $p ) {
    $listlen = count( $list );
    $partlen = floor( $listlen / $p );
    $partrem = $listlen % $p;
    $partition = array();
    $mark = 0;
    for ($px = 0; $px < $p; $px++) {
        $incr = ($px < $partrem) ? $partlen + 1 : $partlen;
        $partition[$px] = array_slice( $list, $mark, $incr );
        $mark += $incr;
    }
    return $partition;
}
Avatar billede bauerdata Nybegynder
16. december 2007 - 21:10 #12
Avatar billede bars Nybegynder
10. november 2010 - 10:16 #13
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester