Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: $merkkijono[$i] ja for-silmukka

latenleffahylly [02.05.2013 18:42:36]

#

Hei, voiko joku selittää tämän logiikan? Eli pääsekö merkkijonon yhteen merkkiin käsiksi [] <- Array tyyppisesti. Ymmärtäisin jos kyseessä on taulukko, mutta että merkkijono. Tarkoitan tuota $nimi -muuttujaa joka on tullut lomakkeelta. Vaiko onko kyse siitä että merkkijono pysyy staattisena ja tuo for-silmukka värjää kirjaimet, parillinen, pariton, parillinen ... jne.

<?php

// nimi on esim. "Late"


$nimi = $_POST["nimi"];
for ($i = 0; $i < strlen($nimi); $i++) {
    if ($i % 2 == 0) {
        $vari = "blue";
    } else {
        $vari = "red";
    }
    $merkki = $nimi[$i];
    echo "<span style=\"color:{$vari}\">{$merkki}</span>";
}
?>

Lisäys: Opas on hieno, mutta eikö tämän voisi tehdä paljon yksinkertaisemmin? Jo tuossa if else vaiheessa?

Lisäys:

<!-- LÄHDEKOODI -->
<span style="color:blue">l</span>
<span style="color:red">a</span>
<span style="color:blue">t</span>
<span style="color:red">e</span>

Hmm.. lähdekoodi paljasti tämän. Nähtävästi kirjaimet voi irroittaa merkkijonosta aika kätevästi.

Teuro [02.05.2013 18:52:22]

#

Niin merkkijono on itseasiassa merkkitaulukko. Tuon voi toki tiivistääkin aika helpolla.

EDIT: merkkijonotaulukko -> merkkitaulukko

<?php

$nimi = "Late";

$varit = Array("blue", "Red", "yellow", "green", "grey");

for ($i = 0; $i < strlen($nimi); $i++) {
    echo "<span style=\"color:{$varit[rand() % count($varit)]}\">{$nimi[$i]}</span>";
}

Yllä oleva koodinpätkää ei tule ottaa turhan vakavasti. :) Alla hiukan paremmin tiivistetty koodi.

<?php

$nimi = "Late";

for ($i = 0; $i < strlen($nimi); $i++) {
    $vari = ($i % 2 == 0) ? "blue" : "red";
    echo "<span style=\"color:{$vari}\">{$nimi[$i]}</span>";
}

latenleffahylly [02.05.2013 19:06:44]

#

Tuo sinun esimerkkisi on järjettömän vaikea, mutta merkkijonotaulukko kuulostaa fiksulta. Eli nähtävästi yleisesti puhutaan merkkijonoista sitten kuitenkin.

Teuro [02.05.2013 19:10:48]

#

Saattaa esimerkki olla myös hiukan kieli poskessa tehty. Merkkijonoista voi varmasti aivan hyvin puhua.

latenleffahylly [02.05.2013 19:12:10]

#

Ensimmäisessä kunnon versiossa leffahyllystä, tallensin yhden näyttelijän aina yhteen muuttujaan. Alussa oli jotenkin vaikea tajuta miten tuo array toimii ja miten helposti sieltä saa tavaraa ulos. Mielestäni foreach olisi sellainen jota pitäisi enemmän painottaa opiskelussa kuin while ja for.. mutta ehkä jälkeenpäin vain luulen näin..

Tuo että merkkijono tavallaan on mini-taulukko jossa saa aina yhden merkin yhteen alkioon.. noh.. tälläista..

- Hmm.. eli tätä juuri tarkoitan Teuron 2 koodi.. eli miksi putkan oppaat tekevät malleista monimutkaisia..?

Lisäys: Sinun esimerkki vai?

Lisäys:

Lisäkysymys: Tämä on oppaasta..

"Komento var_export on näppärä apuväline monimutkaisen taulukon sisällön tarkasteluun. Se tulostaa näkyviin taulukon koko sisällön puumaisena rakenteena."

- Eli minulla tulostaa kaiken samalle riville. Oliko joku php-koodi joka laitetaan sivun yläosaan että toimii. En haluaisi aina käyttää <pre>

Metabolix [02.05.2013 19:20:20]

#

Merkkijonotaulukko tarkoittaisi kyllä taulukkoa, jossa on monta merkkijonoa. Merkkijono on joissain kielissä merkkitaulukko eli taulukollinen merkkejä, mutta PHP:ssä näin ei ole. Siitä huolimatta merkkijonosta saa yhden merkin hakasuluilla. On idioottimaista kysyä, onko näin, kun ihan varmasti itsekin näit sekä oppaasta että kokeilemalla, että näin on.

latenleffahylly kirjoitti:

Opas on hieno, mutta eikö tämän voisi tehdä paljon yksinkertaisemmin? Jo tuossa if else vaiheessa?

Ei voi. Kaikki mahdolliset ratkaisut ovat joko suunnilleen samanlaisia tai paljon mutkikkaampia, ja mielestäni oppaan ratkaisu on erittäin selvä ja yksinkertainen.

latenleffahylly kirjoitti:

Eli minulla [var_export] tulostaa kaiken samalle riville. Oliko joku php-koodi joka laitetaan sivun yläosaan että toimii. En haluaisi aina käyttää <pre>

On eräs PHP-koodi, jolla koko sivu näkyy tekstinä eli täsmälleen siinä muodossa, mitä PHP:llä tulostat:

header("Content-Type: text/plain; charset=UTF-8");

Jos tuo ei kelpaa, pre-tagi tai vastaava CSS-tyyli muulle tagille on ainoa suora ratkaisu. Toinen tapa on ottaa var_exportin tuottama teksti talteen ja tulostaa se itse. Muista myös, että var_export ei automaattisesti käsittele tekstiä HTML-muotoon, joten esimerkiksi muuttujissa oleva HTML-koodi tulostuu HTML-koodina sivulle. Jos haluat tulostaa muuttujan HTML-muodossa ja ilman pre-tagia, voit tehdä näin:

latenleffahylly [02.05.2013 19:29:21]

#

Noniin kaikkitietävä metabolix taas vauhdissa. Joo kiitoksia otan nuo käyttöön samantien. Tuo alin on ihan hauska.. ajattelin käyttää tilanteessa jossa taulukon sisällä on taulukko.

Mietin että jos on esim. Tagi "Aikuiset" niin se voisi olla taulukko joka sisältää genret "draama", "trilleri", "oscar-voittajat" .. Näin ollen tagin avulla hakisi kaikki elokuvat joissa tagi joku noista kolmesta. No täytyy vielä miettiä logiikkaa miten tagit (TAG) toimivat ja miten niillä tehdään hakuja.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta