Toistamaan?

CrossOfDeath

Miten saisin scriptin arpomaan uuden "Id":n jos arvottu numero löytyy jo?

Alla on jo kehittelemäni scripti joka arpoo annetun määrän numeroita 0-9 väliltä, sitten se tarkastaa että löytyykö tiedostosta (testi2.txt) arvittu numerosarja.

Ongelmani on kuitenkin se että jos numero löytyy, miten saan scriptini arpomaan numeroa niin kauan, että se arpoo vapaana olevan numero sarjan?


$testi2 = @file("testi2.txt");

function id(){
global $testi2;//Tiedosto
$mid ="2";//Montako numreroa id sisältää
$id ="";//Id nollattu valmiiksi

//arvotaan Id
for ($i = 0; $i < $mid; $i ) {

$random = (rand()%9);
$id = $id.$random;
}

echo "$id \n";//tulostetaan arvottu id

for ($i = 0; $i < sizeof($testi2); $i ){
$list = $testi2[$i];
list($tid, $holynpoly) = explode("|", $list);

if($tid == $id){ echo "Id on olemassa"; $vapaaid = FALSE;}//Id löytyy jo
else{ $vapaaid = TRUE;}//Id vapaa
}
}

4

340

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Jaska Perusjaska

      Kannattaa ehkä tehdä erikseen funktio joka arpoo randomnumeron ja toinen joka vertaa numeroa taulukkoon. Jälkimmäinen palauttaa TRUE tai FALSE sen mukaan löytyykö.

      sitten vaikka:

      $id = random();

      while(checkId($id, $taulukko)) {
      $id = random();
      }

      echo "Sinun ID on: " . $id;

      Tai no ei nyt tuota randomiakaan välttämättä tarvitse omaksi funktioksi tehdä, mutta onhan se vähän näppärämpi. Esim. voisi antaa parametriksi haluttujen numeroiden määrän, vähän kuten sinullakin tuossa on.

      Sitä voisi sitten käyttää muuallakin, toisin kuin tuota sinun funktiotasi, joka on hyvin pitkälti sidottu pelkästään tuohon käyttötarkoitukseen. Eihän sillä nyt suurta merkitystä tälläisissä pikkuscripteissä ole, mutta on vain hyvä ohjelmointitapa.

      Samoin tuota toistakin funktiota voisi käyttää muuallakin, jos sille annetaan vain parametrinä merkkijono, jota se etsii toisena parametrina annetusta taulukosta.

      Nämä kun vielä nimeää järkevästi ja tallentaa johonkin kirjastoon talteen, niin voi käyttää samoja funktioita vielä monesti hyödyksi.

      • CrossOfDeath

        Tajuan kyllä mitä ajat takaa tolla pätkällä, mutta olen sen verran kokematon php -koodaaja, etten tiä että miten saan ton käytännössä toimimaan..

        (checkId($id, $taulukko)) -rivi hämää minua, siitä en ymmärrä että miten tuo pätkä toimii...

        Joten haluatko kertoa että miten tämän koodin pätkän saa käytännössä toimimaan?


      • Jaska Perusjaska
        CrossOfDeath kirjoitti:

        Tajuan kyllä mitä ajat takaa tolla pätkällä, mutta olen sen verran kokematon php -koodaaja, etten tiä että miten saan ton käytännössä toimimaan..

        (checkId($id, $taulukko)) -rivi hämää minua, siitä en ymmärrä että miten tuo pätkä toimii...

        Joten haluatko kertoa että miten tämän koodin pätkän saa käytännössä toimimaan?

        Joo no nuo minun viestini on yleensä enemmän tai vähemmän jonkinlaista pseudokoodia. Tarkoituksena on antaa vähän jotakin suuntaa, muttei ihan valmistakaan ratkaisua. Asiat oppii helpommin kun niitä joutuu miettimään päänsä puhki.

        $id = random();

        $randoms = array("25", "23", "29", "73", "19", "83", "10",
        "11", "14", "62", "53", "63", "55", "13", "15", "33", "32", "66");

        function random() {
        return rand(10, 99);
        }

        $i = 1;

        while(in_array($id, $randoms)) {
        echo "Round: $i ";
        echo "Id: $id ";
        $id = random();
        $i ;
        }

        echo " Your id is $id ";

        Tässä koodi, joka arpoo kaksinumeroisen luvun, vertaa sitä taulukossa oleviin lukuihin ja arpoo niin kauan uusia lukuja, kunnes id:tä ei enää löydy taulukosta.

        Lisäksi tuo echottaa osumat ja kertoo lopullisen id:n.

        Php:stä löytyy tosiaan valmiskin in_array-funktio, joka hakee merkkijonoa taulukosta. Ei sellaista tarvinnut tehdä itse. Ja tässä esimerkissä olisi helpompi käyttää myös rand-funktiota suoraan.

        Tein kaksinumeroisen siksi, että muuten en olisi koskaan saanut hittejä.

        While-looppi suoritetaan niin kauan kunnes in_array-funktio palauttaa TRUE. Eli kunnes on arvottu id, jota ei taulukosta löydy.


      • Cross_Of_Death
        Jaska Perusjaska kirjoitti:

        Joo no nuo minun viestini on yleensä enemmän tai vähemmän jonkinlaista pseudokoodia. Tarkoituksena on antaa vähän jotakin suuntaa, muttei ihan valmistakaan ratkaisua. Asiat oppii helpommin kun niitä joutuu miettimään päänsä puhki.

        $id = random();

        $randoms = array("25", "23", "29", "73", "19", "83", "10",
        "11", "14", "62", "53", "63", "55", "13", "15", "33", "32", "66");

        function random() {
        return rand(10, 99);
        }

        $i = 1;

        while(in_array($id, $randoms)) {
        echo "Round: $i ";
        echo "Id: $id ";
        $id = random();
        $i ;
        }

        echo " Your id is $id ";

        Tässä koodi, joka arpoo kaksinumeroisen luvun, vertaa sitä taulukossa oleviin lukuihin ja arpoo niin kauan uusia lukuja, kunnes id:tä ei enää löydy taulukosta.

        Lisäksi tuo echottaa osumat ja kertoo lopullisen id:n.

        Php:stä löytyy tosiaan valmiskin in_array-funktio, joka hakee merkkijonoa taulukosta. Ei sellaista tarvinnut tehdä itse. Ja tässä esimerkissä olisi helpompi käyttää myös rand-funktiota suoraan.

        Tein kaksinumeroisen siksi, että muuten en olisi koskaan saanut hittejä.

        While-looppi suoritetaan niin kauan kunnes in_array-funktio palauttaa TRUE. Eli kunnes on arvottu id, jota ei taulukosta löydy.

        Kiitos, koitan pärjätä tällä :D uskoisin et näillä tiedoilla saan random arpojani toimimaam kuten haluankin...

        Juu itselläni on tarkoitus käyttää kyseistä koodia arpomaan 4, 6 ja 8 -numeroisia id -koodeja, testipenkissä käytän vain kaksinumeroisia lukuja, samasta syystä...

        Tyylisi on kyllä hyvä, mutta tuohon en vain päässyt mitenkään käsiksi. Ylensä olen rakentanutkin omat koodini enemmän tai vähemmän murusista... Aina vähän mallia jostain ohjelmointi putkasta, ja sitten omaa koodia peliin...


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Poliisi: Kymmenhenkinen pohjalaisperhe ollut vuoden kateissa kansainvälinen etsintäkuulutus Poliis

      Poliisi: Kymmenhenkinen pohjalaisperhe ollut vuoden kateissa – kansainvälinen etsintäkuulutus Poliisi pyytää yleisön apu
      Maailman menoa
      325
      2871
    2. Tässä totuus jälleensyntymisestä - voit yllättyä

      Jumalasta syntyminen Raamatussa ei tässä Joh. 3:3. ole alkukielen mukaan ollenkaan sanaa uudestisyntyminen, vaan pelkä
      Jälleensyntyminen
      301
      1443
    3. Mitään järkeä?

      Että ollaan erillään? Kummankin pää on kovilla.
      Ikävä
      108
      1281
    4. Noniin rakas

      Annetaanko pikkuhiljaa jo olla, niin ehkä säilyy vienot hymyt kohdatessa. En edelleenkään halua sulle tai kenellekään mi
      Ikävä
      99
      1265
    5. En kadu sitä, että kohtasin hänet

      mutta kadun sitä, että aloin kirjoittamaan tänne palstalle. Jollain tasolla se saa vain asiat enemmän solmuun ja tekee n
      Ikävä
      83
      1261
    6. Oisko mitenkään mahdollisesti ihan pikkuisen ikävä..

      ...edes ihan pikkuisen pikkuisen ikävä sulla mua??.. Että miettisit vaikka vähän missähän se nyt on ja oiskohan hauska n
      Ikävä
      58
      1215
    7. Lapuan sanomissa käy rytinä

      Pistivät sitten päätoimittajan pihalle
      Lapua
      48
      1115
    8. Helena Koivu : Ja kohta mennään taas

      Kohta kohtalon päivä lähestyy kuinka käy Helena Koivulle ? Kenen puolella olet? Jos vastauksesi on Helenan niin voisi
      Kotimaiset julkkisjuorut
      78
      1017
    9. Au pair -työ Thaimaassa herättää kiivasta keskustelua somessa: "4cm torakoita, huumeita, tauteja..."

      Au pairit -sarjan uusi kausi herättää keskustelua Suomi24 Keskustelupalvelussa. Mielipiteitä ladataan puolesta ja vastaa
      Tv-sarjat
      24
      921
    10. Oot ihana

      Toivottavasti nähdään sattumalta jonain kesäpäivänä♥️🥺🫂
      Ikävä
      33
      827
    Aihe