Miksi jakojäännökset ei vaan toimi?
Tällä scriptillä tulostaa joka merkkijonon välissä vain - tai rivinvaihdon:
Onko tuossa koodissa mitään järkeä? Ensin asetat i:n arvoksi 0 ja sitten kasvatat sitä yhdellä, eli ehtolauseen kohdalla i:n arvo on aina 1, jonka jakojäännös viidellä jaettaessa on selkeästi 1.
Mitäs nyt kun työnsin $i:n function yläpuolelle. (Funktion, jossa scripti tälläkinhetkellä on.)
Short Php kirjoitti:
Mitäs nyt kun työnsin $i:n function yläpuolelle.
Tuosta nyt ei ota mitään selvää.
No, ehkä helpointa on jos pistän koko scriptin näkyville:
<?php
$i = 0;
function jippii($m1, $m2) {
echo $m1;
if ($i % 5 == 0) {
echo("<br>");
} else {
echo(" - ");
}
$i++;
}
jippii("moi", "vain");
jippii("hei", "on");
jippii("terve", "menossa");
jippii("banaani", "kohti");
jippii("apina", "saari");
jippii("php", "puu");
/* Ja tämänhän pitäisi tulostaa
moi - hei - terve - banaani - apina<br>php -
Mutta se tulostaa joko pelkkiä bee ärriä tai pelkkiä - -merkkejä.
*/
?>Se ei tulosta muuta johtuen siitä ettet käske sen tulostaa mitään muuta >_>.
Öh. Et tainnut ymmärtää oikein. Tarkoitin että sen pitäisi tulostaa moi - hei - terve - banaani - apina<br>php - , mutta se tulostaa moi - hei - terve - banaani - apina - php - tai moi<br>hei<br>terve<br>banaani<br>apina<br>php<br>.
Ainakin tuossa koodissa oletat $i:n olevan globaali, mitä se ei ole. Laita funktion ensimmäiselle riville global $i;
Ei toimi vieläkään.
Pistä se staattiseksi muuttujaksi ennemmin kuin globaaliksi:
<?php
function jippii($m1, $m2) {
static $i = 0;
echo $m1;
if ($i % 5 == 0) {
echo("<br>");
} else {
echo(" - ");
}
$i++;
}
jippii("moi", "vain");
jippii("hei", "on");
jippii("terve", "menossa");
jippii("banaani", "kohti");
jippii("apina", "saari");
jippii("php", "puu");
?>Toimiiko?
Ja miksi staattiset eikä globaalit? Turha lähteä sotkimaan tuollaisella funktion ulkopuolista muistiavaruutta, koska muuttujaa selkeästi käytetään vain funktion sisällä. Staattiset muuttujat:
http://wiki.mureakuha.com/wiki/PHP-opas#Staattiset_eli_pysyv.C3.A4t_muuttujat
Jos alottaisit sen iin ykkösestä, eikä nollasta.
Kiitoksia JTS, toimii. Ja kiitokset blazellekkin, tuo 1:sestä aloittaminen auttoi (jopa).
Aihe on jo aika vanha, joten et voi enää vastata siihen.