Merkkijonot ja taulukot

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.
6312
Äänestä

Muut lukivat myös

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?

Äänestä
  • Tää on taas jonkun huonosti koulutetun opettajan antama koulutehtävä. Sitten ihmetellään, miks niitä tietoturvareikiä sinne PHP-koodiin tulee...

    Duh..

    Äänestä

  • "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.

    Äänestä

  • Jerp kirjoitti:

    Tää on taas jonkun huonosti koulutetun opettajan antama koulutehtävä. Sitten ihmetellään, miks niitä tietoturvareikiä sinne PHP-koodiin tulee...

    Duh..

    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.

    Äänestä

  • Uneton Prinsessa kirjoitti:

    "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.

    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 ---

    Äänestä

  • Vanha Erkki kirjoitti:

    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).

    Äänestä

Kommentoi aloitusta


Uneton prinsessa kirjoitti:

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.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu