Jeesatkaapas nyt prinssit avutonta prinsessaista. Kysymys on valitettavasti järkyttävän pitkä, mutta toivon silti että avullanne saisin tähän ratkaisun.
Kyse on tavallisten merkkijonojen haku taulukosta ja niiden sijoittaminen oikeisiin muuttujiin.
Aloitetaan siitä että olen dokumentissa määritellyt muutamia arvoja muuttujille:
#kasveja
$kasvi[0] = "kukka"; #oletus
$kasvi[1] = "puu";
$kasvi[2] = "heina";
$kasvi[3] = "sammal";
#esineitä
$esine[0] = "kruunu"; #oletus
$esine[1] = "valtikka";
$esine[2] = "vaunut";
$esine[3] = "kenka";
Sitten on sellainen tilanne että tämä dokumentti saa syötteessä x määrän muuttujia:
$var1, $var2, $var3, $var4, $var5, $var6, ...
Näillä muuttujilla on tietenkin jokin arvo ja niitä arvoja pitäisi sijoitella tiettyjen sääntöjen mukaan. Välissä ei ole arvottomia muuttujia, mutta niitä $var muuttujia siis tosiaan on x määrä.
- $var1 :n arvo saattaa olla jokin $kasvi[] -taulukon arvoista. Jos on, niin se arvo pitäisi saada vaikka tulostettua ( echo $kasvi; ) tai tietty sitä käytetään muutenkin hamassa tulevaisuudessa. Jos $var1 ei sisällä mitään osumaa, niin $kasvi :n arvoksi pitää tulla oletusarvo (eli kukka).
- $var2 :n arvo saattaa olla jokin $esine[] -taulukon arvoista jne. Katso ylempi. Mutta jos $var1 ei ole täsmännyt mininkään, niin $esine[] -taulukolle tarkoitettu arvo saattaakin olla jo $var1 -muuttujassa.
- ehkäpä haluan myöhemmin käyttää vielä kolmatta vastaavaa, joten olisi hyvä että sen pystyisi tarvittaessa pienellä muutoksella lisäämään myöskin.
- "suurimmasta" $var -arvosta pitäisi napata arvo muuttujaan $sana . Tarkoitan siis suurimmalla tuon $var -muuttujien listan viimeistä jolla on arvo.
- loput arvot pitäisi saada siististi uuteen taulukkoon $loput[] (joka ei siis sisällä mitään edellisistä).
Esimerkki 1.
Syötteenä saadaan seuraavaa: $var1="puu", $var2="vaunut", $var3="tiara", $var4="kurpitsa", $var5="prinssi", $var6=""
Tällöin pitäisi muuttujilla olla seuraavat arvot:
$kasvi # puu
$esine # vaunut
$loput[0] # tiara
$loput[1] # kurpitsa
$sana # prinssi
ok?
Esimerkki 2.
Syötteenä saadaan seuraavaa: $var1="vaunut", $var2="tiara", $var3="kurpitsa", $var4="prinssi", $var5="puu", $var6=""
Tällöin pitäisi muuttujilla olla seuraavat arvot:
$kasvi # kukka
$esine # vaunut
$loput[0] # tiara
$loput[1] # kurpitsa
$loput[2] # prinssi
$sana # puu
Esimerkki 3.
Syötteenä saadaan seuraavaa: $var1="kukka", $var2="", $var3="", $var4="", $var5=""
ällöin pitäisi muuttujilla olla seuraavat arvot:
$kasvi # kukka
$esine # kruunu
$loput[0] #
$loput[1] #
$loput[2] #
$sana # sammakko
(ai niin, unohdin mainita että myös muuttujalle $sana pitää olla jokin oletusarvo, vaikkapa tuo sammakko. Taulukko $loput[] ei halua mitään oletusarvoa vaan tyytyy olemaan tyhjä jos niin vaaditaan:)
Puoli valtakuntaa tarjolla avuliaalle prinssille sillä tämän rinsessan tiara alkaa jo kiristää liikaa tippaleipäaivoja.
Kyse on tavallisten merkkijonojen haku taulukosta ja niiden sijoittaminen oikeisiin muuttujiin.
Aloitetaan siitä että olen dokumentissa määritellyt muutamia arvoja muuttujille:
#kasveja
$kasvi[0] = "kukka"; #oletus
$kasvi[1] = "puu";
$kasvi[2] = "heina";
$kasvi[3] = "sammal";
#esineitä
$esine[0] = "kruunu"; #oletus
$esine[1] = "valtikka";
$esine[2] = "vaunut";
$esine[3] = "kenka";
Sitten on sellainen tilanne että tämä dokumentti saa syötteessä x määrän muuttujia:
$var1, $var2, $var3, $var4, $var5, $var6, ...
Näillä muuttujilla on tietenkin jokin arvo ja niitä arvoja pitäisi sijoitella tiettyjen sääntöjen mukaan. Välissä ei ole arvottomia muuttujia, mutta niitä $var muuttujia siis tosiaan on x määrä.
- $var1 :n arvo saattaa olla jokin $kasvi[] -taulukon arvoista. Jos on, niin se arvo pitäisi saada vaikka tulostettua ( echo $kasvi; ) tai tietty sitä käytetään muutenkin hamassa tulevaisuudessa. Jos $var1 ei sisällä mitään osumaa, niin $kasvi :n arvoksi pitää tulla oletusarvo (eli kukka).
- $var2 :n arvo saattaa olla jokin $esine[] -taulukon arvoista jne. Katso ylempi. Mutta jos $var1 ei ole täsmännyt mininkään, niin $esine[] -taulukolle tarkoitettu arvo saattaakin olla jo $var1 -muuttujassa.
- ehkäpä haluan myöhemmin käyttää vielä kolmatta vastaavaa, joten olisi hyvä että sen pystyisi tarvittaessa pienellä muutoksella lisäämään myöskin.
- "suurimmasta" $var -arvosta pitäisi napata arvo muuttujaan $sana . Tarkoitan siis suurimmalla tuon $var -muuttujien listan viimeistä jolla on arvo.
- loput arvot pitäisi saada siististi uuteen taulukkoon $loput[] (joka ei siis sisällä mitään edellisistä).
Esimerkki 1.
Syötteenä saadaan seuraavaa: $var1="puu", $var2="vaunut", $var3="tiara", $var4="kurpitsa", $var5="prinssi", $var6=""
Tällöin pitäisi muuttujilla olla seuraavat arvot:
$kasvi # puu
$esine # vaunut
$loput[0] # tiara
$loput[1] # kurpitsa
$sana # prinssi
ok?
Esimerkki 2.
Syötteenä saadaan seuraavaa: $var1="vaunut", $var2="tiara", $var3="kurpitsa", $var4="prinssi", $var5="puu", $var6=""
Tällöin pitäisi muuttujilla olla seuraavat arvot:
$kasvi # kukka
$esine # vaunut
$loput[0] # tiara
$loput[1] # kurpitsa
$loput[2] # prinssi
$sana # puu
Esimerkki 3.
Syötteenä saadaan seuraavaa: $var1="kukka", $var2="", $var3="", $var4="", $var5=""
ällöin pitäisi muuttujilla olla seuraavat arvot:
$kasvi # kukka
$esine # kruunu
$loput[0] #
$loput[1] #
$loput[2] #
$sana # sammakko
(ai niin, unohdin mainita että myös muuttujalle $sana pitää olla jokin oletusarvo, vaikkapa tuo sammakko. Taulukko $loput[] ei halua mitään oletusarvoa vaan tyytyy olemaan tyhjä jos niin vaaditaan:)
Puoli valtakuntaa tarjolla avuliaalle prinssille sillä tämän rinsessan tiara alkaa jo kiristää liikaa tippaleipäaivoja.
Vastaukset 6
Vanhimmat
Ilmeisesti haluat jonkin koodin pätkän joka luokittelisi $varX muuttujien arvot eri muuttujiin, mainitsemiesi taulukoiden perusteella. Luokittelun lopuksi ne muuttujat joihin ei kertynyt yhtään mitään, pitäisi alustaa oletus arvolla. Tulkitsinko oikein?
Koita nyt kuitenkin selittää uudelleen se asia, mitä varsinaisesti haluat tehtävän? Haluatko jonkin funktion, tms.? Selitä myös ihan alkuun se, mitä tarkoitat sillä, että DOKUMENTTI saa syötteenä muuttujia? Miksi $sana -muuttuja ei ole viimeisessä esimerkissä "kukka", joka on viimeinen $var -muuttujien listassa jolla on jokin arvo?
Tää on taas jonkun huonosti koulutetun opettajan antama koulutehtävä. Sitten ihmetellään, miks niitä tietoturvareikiä sinne PHP-koodiin tulee...
Duh..
"Ilmeisesti haluat jonkin koodin pätkän joka luokittelisi $varX muuttujien arvot eri muuttujiin, mainitsemiesi taulukoiden perusteella."
Aivan oikein. Juuri tätä haluan. Tulkitsit aivan oikein.
Se, tehdäänkö asia funktiolla vai millä, ei ole oikeastaan väliä. Osaan tehdä asian for- ja if- lauseita käyttäen, mutta sillon koodi on niin pahaa hubbabubbaa että itseäkin hävettää.
Dokumentti saa syötteenä muuttujia. Onko sillä merkitystä miten se ne saa? Käsittääkseni ongelmani oli se, miten muuttujia ja taulukoiden sisältöä on kätevintä vertailla.
"Miksi $sana -muuttuja ei ole viimeisessä esimerkissä "kukka", joka on viimeinen $var -muuttujien listassa jolla on jokin arvo? "
Siksi, että "kukka" löytyy jo ensimmäisestä taulukosta. Tämä on siis järjestys. Jos ainoata sanaa ei olisi löytynyt ensimmäisestä eikä toisesta taulukosta, niin siitä olisi tullut muuttujan $sana arvo.
Miten merkkijonojen etsiminen taulukoista muodostaa tietoturvaongelman?
Ja ei. Olen ehkä huonosti koulutettu, mutta kouluttaja EN ole. Kyseessä ei siis ole koulutehtävä, vaan ihan oma päänsärkyni. Tarvitsen siis ihan itse omaan projektiini tuota.
En edelleenkään ota oikein selvää tuosta viimeisestä arvosta, mutta olisiko alla olevasta esimerkistä jotain apua.
--- KOODI ALKAA ---
--- KOODI LOPPUU ---
--- TULOS ALKAA ---
Esimerkki 2
Kasvi: Array ( [0] => kukka )
Esine: Array ( [0] => vaunut )
Loput: Array ( [0] => tiara [1] => kurpitsa [2] => prissi )
Sana: puu
--- TULOS LOPPUU ---
Ymmärsit yllättävän hyvin vaikka selitin naisellisen selkeästi. Sain paljon hyötyä koodistasi, joskin jouduin paikkaamaan sitä vielä hieman Hubbabubballa (nolottaa, rumaa koodia lisäsin).
Ja anteeksi kiitosten viipyminen. Piti metsästää prinssejä (tuloksettomasti).