Teen php:llä sellaista scriptiä joka miinustaa muuttujasta tietyn verran, jos muuttuja kuuluu tiettyyn ryhmään. Ongelmana on nytten, että jos miinustetaan monta kertaa niin muuttuja ei vaihda ryhmää vaan miinustaa koko ajan saman verran.
Koodi:
<?php $miinustettava = $_POST['miinustettava']; $pisteet = $_POST['pisteet'] + $_POST['pisteet2']; if($tulostus == "1-9" || $tulostus == "10-18") { $pisteet = $pisteet + 18; } $filu = file("taulukko.txt"); $arvo = 0; foreach ($filu as $arvo => $valuae) { $tieto = explode("|", $valuae); if($tieto[1] == "") { if($miinustettava <= $tieto[2]) { echo 'Ryhmä 1'; } } elseif($tieto[1] != "") { if($miinustettava <= $tieto[2] && $miinustettava >= $tieto[1]) { $pisteet = $pisteet - 36; if($pisteet > 0) { for($arvo2=0; $arvo2<$pisteet; $arvo2++) { $miinustettava = $miinustettava - $tieto[6]; } } } } $arvo++; } echo $miinustettava; ?>
Taulukko.txt
1||4.4|35|36|0.1|0.1| 2|4.5|11.4|34|36|0.1|0.2| 3|11.5|18.4|33|36|0.1|0.3| 4|18.5|26.4|32|36|0.1|0.4| 5|26.5|36.0|31|36|0.2|0.5| 6|37|54||||1|
Esim. jos vaikka
$miinustettava = 54, $_POST['pisteet'] = 70, $_POST['pisteet2'] = 19
niin lopussa $miinustettava on 1, vaikka sen pitäisi olla 20.
EDIT: olen tekemässä loopitusta tuohon:
elseif($tieto[1] != "")
Niin miten ratkaisisin tämän?
En nyt ratkaisusta tiedä, mutta koodia tarkemmin tutkimatta/kokeilematta voisin sanoa, että tuo kohta
if($tulostus == "1-9" || $tulostus == "10-18") {//Voiko lukuja määrittää noin? $pisteet = $pisteet + 18; } $filu = file("taulukko.txt"); $arvo = 0; //$arvo=FALSE
Eli tuossa en tidä, voiko noita lukuja tossa if-lauseessa märittää noin (En voi kokeilla ny ja en oo kokeillu) ja onko ton $arvo-muuttujan arvoks tarkotus asettaa FALSE vaiko "0", jos edellinen, pitää se 0 laittaa lainausmerkkien sisään.
Ja suoraan sanoen, en oikein tajuu tota "Taulukko.txt", vähän sekava :P
EDIT: Toivottavasti auttoi
if($tulostus == "1-9" || $tulostus == "10-18") {//Voiko lukuja määrittää noin? $pisteet = $pisteet + 18; } $filu = file("taulukko.txt"); $arvo = 0; //$arvo=FALSE
Juu, eli tätä kohtaa ei voi tehdä näin, ainakaan PHP:llä. Tässä tapauksessa minä ainakin tekisin näin (omilla taidoillani):
if(($tulostus > 1 && $tulostus < 9) || ($tulostus > 10 && $tulostus < 18)) $pisteet = $pisteet + 18; $filu = file("taulukko.txt"); $arvo = 0; //$arvo=FALSE
EDIT. Kun katson tota sinun koodia nin en kyllä tajua mitään tuosta ideasta.
tuossa kohdassa:
if($tulostus == "1-9" || $tulostus == "10-18") { $pisteet = $pisteet + 18; }
minä tarkastan että onko $tulostus muuttujassa merkkijono 1-9 vai merkkijono 10-18 en vertaa lukuja siinä..
Ja koodini ideana olisi vähentää $miinustettava muuttujasta taulukko.txt:ssä oleva arvo ja tietyn monta kertaa ja tarkistaa heti vähentämisen jälkeen muuttuiko $miinustettava muuttujan alue tuossa taulukko.txt:ssä jos muuttuu niin vähentää sille aluelle kuuluva tieto ja jos alue ei muutu niin vähentää se sama... eli tämä pitäisi tehdä loopissa tietyn monta kertaa..
nuo alueet ovat 1,2,3,4,5,6 ja tuo tieto mikä pitäisi vähentää on 0.1,0.2,0.3,0.4,0.5 tai 1
Siis tuossahan ei oo mitään silmukkaa joka kierrättäis sitä mitä miinustetaan?
Yritin tehdä uuden loopin ilman tuota taulukko.txt:tä
enkä saannut sitä toimimaan oikein. Missäköhän vika?
if($pisteero>0) { for($arvo=0; $arvo<$pisteero; $arvo++) { if($miinustettava > 36 && $miinustettava < 37) { $miinustettava = 36; } if($miinustettava <= 54 && $miinustettava >= 37) { $miinustettava = $miinustettava - 1; } elseif($miinustettava <= 36.0 && $miinustettava >= 26.5) { $miinustettava = $miinustettava - 0.5; } elseif($miinustettava <= 26.4 && $miinustettava >= 18.5) { $miinustettava = $miinustettava - 0.4; } elseif($miinustettava <= 18.4 && $miinustettava >= 11.5) { $miinustettava = $miinustettava - 0.3; } elseif($miinustettava <= 11.4 && $miinustettava >= 4.5) { $miinustettava = $miinustettava - 0.2; } } } echo $miinustettava;
Tässä $pisteero = 18, $miinustettava on aluksi 54, tämän pitäisi antaa $miinustettava:n arvoksi 36, mutta se antaakin 18.4.
for($arvo=0; $arvo<$pisteero; $arvo++) { if($miinustettava > 36 && $miinustettava < 37) { $miinustettava = 36; }
Miten joku kokonaisluku voi olla suurempi kuin 36 ja silti pienempi kuin 37?
Tossa kohassa ei oikein oo järkeä.
Jos haet sitä, että tuo $miinustettava on 36, niin laita if-lause vaikkapa näin
if($miinustettava > 35 && $miinustettava < 37) { $miinustettava = 36; } #TAI if($miinustettava > 36 xor $miinustettava < 37) { $miinustettava = 36; } #TJS. /*Tossa sun lausekkeessa toi if-lause tarkottas suunnilleen *tätä: *Jos($miinustettava = suurempi kuin 36 ja jos miinustettava * = pienempi kuin 37) * Eli koodina */ if($miinustettava > 36 and $miinustettava < 37)
En oo varma, oonko oikeessa, mutta aika epäloogiselta tuo vaikuttaa
$miinustettava ei ole kokonaisluku välttämättä, jos huomaat esim. rivin
elseif($miinustettava <= 36.0 && $miinustettava >= 26.5) { $miinustettava = $miinustettava - 0.5; }
Eli kun $miinustettavasta vähennetään 0.5 niin eihän se ole kokonaisluku enään.
Tuon rivin
if($miinustettava > 36 && $miinustettava < 37) { $miinustettava = 36; }
Ideana olisi tarkistaa koko ajan, että jos $miinustettava on lukujen 36 ja 37 välistä joku desimaaliluku niin se antaisi $miinustettava muuttujalle arvon 36. Esim. $miinustettava == 36.7 => $miinustettava on 36.
Kyllä tuo mulla antaa 36 $miinustettava:n arvoksi... Onhan lähtöarvot varmasti nuo mitkä mainitsit?
Aihe on jo aika vanha, joten et voi enää vastata siihen.