Diskuze: PHP LARAVEL nechapen vysledok tohoto cyklus
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 8 zpráv z 8.
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Mozna by bylo dobre napsat, co ten kod ma delat a co to dela ted. A jake hodnoty jsou v jednotlivych promennych. Jestli je umis vypsat pro kazdy radek cyklu, treba. V php to delam pres scho nebo var_dump, vsude, kde se ma zmenit nejaka promena.
Podle mne, z toho kodu neni jasne ani to, jake hodnoty jsou na zacatku.
Zkus na chvilku zapomenout na db a zkus tam dat cisla, vyrobit jednoduchy
spustitelny priklad.
A ted by bylo moc fajn, kdybys ten kod vlozit sem, aby slo udelat copy paste.Z
obrazku to neudelas. Takhle to neni mozne otestovat, jake to dava vysledky.
A bylo by mozna dobre, aby sis na vysledky polic udelal funkci.
function xxx($dopyt)
{
$v = $dopyt->...;
return $v>240 && $v<250 ? 5 : ($v>=250 && $v<265 ? 6 : false);
}
$pocet_polic = xxx($dopyt);
----
$a = 97,6 * (60 - 10) / 10000 * 9,55 = 4,6604
$b = 4,6604 * 6 + ??? = 27,9624 + ??? = 27,9624
$suma1 = $suma1 + $b = ??? + $b
$suma1 = $suma1 + $b = ??? + $b // pises, ze 2x
$suma1 = 55,9248
$a = 97,6 * (60 - 10) / 10000 * 9,55 = 4,6604
$c = 4,6604 * 6 + ??? = 27,9624 + ??? = 27,9624
$suma6 = $suma6 + $b = ??? + $b = 27,9624
$suma = $suma6 = 27,9624 // ty pises o jakemsi 83? To mas odkud?
// A vubec, zamysli se nad kazdym otaznikem.
// A co je v suma1 a 6 predtim. Jestli tam nejsou data z jineho cyklu, vyrobku
Jinak, ten cuklus bych stavel takto:
$suma = 0;
cyklus()
{
if (...)
{
...
$suma += ...
}
elseif (...)
{
...
$suma += ...
}
}
echo $suma;
<?php
$pole = ['http://localhost/bibi/public/img/vypln/1.png','http://localhost/bibi/public/img/vypln/1.png','http://localhost/bibi/public/img/vypln/6.png'];
$cena_vnutro1 = 0;
$cena_vnutro6 = 0;
$cena6 = 0;
$cena1 = 0;
for($i = 0; $i < 3; $i++ ){// cyklus prebehne 3 krat 1,2,3
if( $pole[$i] == 'http://localhost/bibi/public/img/vypln/1.png' ){ //tento obrazok je vo výsledoku 2x
$pocet_polic = 6;
$cena_polica1 = ( 97.6 * (60 - 10) / 10000 ) * 9.55;
$cena1 = $cena_polica1 * 6;//vysledok je 27,9624 + hranovanie
}
$cena_vnutro1 += $cena1;
// koniec obr1 http://localhost/bibi/public/img/vypln/1.png
if( $pole[$i] == 'http://localhost/bibi/public/img/vypln/6.png' ){ //tento obrazok je vo výsledoku 1x
$pocet_polic = 6;
$cena_polica6 = ( 97.6 * (60 - 10) / 10000 ) * 9.55;
$cena6 = $cena_polica6 * 6;//vysledok je 27,9624 + hranovanie
}
$cena_vnutro6 += $cena6; // 27.96 ok
}
echo $cena_vnutro = $cena_vnutro1 + $cena_vnutro6; //to je po cykly
Tak ze som kod zjednodusil v cyklus prebehne 3x , 2x s jednou podmienkou
(obrazkom), 1x jednou podmienkou. Výsledok kazdej podmienky je 27,9624 x 3 =
83,8872.
Ale môj výsledok je ešte o jednu otácku vyšší 83,8872 + 27,9624 =
111,8496 prečo ?
float(27.9624) int(0) float(55.9248) int(0) float(83.8872) float(27.9624)
111.8496
tak že prvá podmienka platí 27.9624
druha neplati 0
------------------------------------------------------ 1. krok cyklu
prvá podmienka platí 55.9248
druha neplati 0
------------------------------------------------------ 2. krok cyklu
prvá podmienka neplatí ale hodnota sa navýšila 83.8872
druha platí 27.9624
------------------------------------------------------ 3. krok cyklu
výsledok 111.8496
tak asi si si odpoviem sám ... posunul som cena1 = 0 pred prvu podmienku
a cena6 = 0 pred druhu podmienku a myslim ze uz to rata spravne
<?php
$pole = ['http://localhost/bibi/public/img/vypln/1.png','http://localhost/bibi/public/img/vypln/1.png','http://localhost/bibi/public/img/vypln/6.png'];
$cena_vnutro1 = 0;
$cena_vnutro6 = 0;
for($i = 0; $i < 3; $i++ ){// cyklus prebehne 3 krat 1,2,3
$cena1 = 0;
if( $pole[$i] == 'http://localhost/bibi/public/img/vypln/1.png' ){ //tento obrazok je vo výsledoku 2x
$pocet_polic = 6;
$cena_polica1 = ( 97.6 * (60 - 10) / 10000 ) * 9.55;
$cena1 = $cena_polica1 * 6;//vysledok je 27,9624 + hranovanie
}
var_dump($cena_vnutro1 += $cena1);
// koniec obr1 http://localhost/bibi/public/img/vypln/1.png
$cena6 = 0;
if( $pole[$i] == 'http://localhost/bibi/public/img/vypln/6.png' ){ //tento obrazok je vo výsledoku 1x
$pocet_polic = 6;
$cena_polica6 = ( 97.6 * (60 - 10) / 10000 ) * 9.55;
$cena6 = $cena_polica6 * 6;//vysledok je 27,9624 + hranovanie
}
var_dump($cena_vnutro6 += $cena6); // 27.96 ok
}
echo $cena_vnutro = $cena_vnutro1 + $cena_vnutro6; //to je po cykly
Tak, uz to vidim. A bylo to nejspis i v te puvodni verzi. Az na to, ze tam
cast kodu chybela.
Problem je ten, co jsem zminil s tim if-elseif.
c1 = 0
cyklus (1,1,0)
if=true {c1 = 123}
if=false {c2 = 234}
c += c1 + c2 // c1=123, c2 = 0 // ty to mas pod kazdym ifem c+=c1, c+=c2, ale to melo byt uvnitr ifu!
if=true {c1 = 123}
if=false {c2 = 234}
c += c1 + c2 // c1=123, c2 = 0
if=false {c1 = 123}
if=true {c2 = 234}
c += c1 + c2 // c1=123, c2 = 234 // c1 zustalo z predchoziho cyklu 123, ale ty ocekavas nulu
---
// Cili tohle
if=true {c1 = 123}
c += c1
if=false {c2 = 234}
c += c2
// a tohle je uplne neco jineho
if=true {c1 = 123; c += c1}
if=false {c2 = 234; c += c2}
// nebo
if=true {c1 = 123; c += c1}
elseif=false {c2 = 234; c += c2}
V tom prvnim pripade pripocitavas c1 a c2 vzdy, ikdyz if nebyl true a hodnotu nenulujes, takze beres z prechoziho cyklu. Podobne bys dopadl, kdybys to v array otocil, zas by tam bylo navic 234 a dokonce 2x.
Ono, cele si to tim c1 a c2 komplikujes, to je zbytecne navic.
//$cena1 = $cena_polica1 * 6
//$cena_vnutro1 += $cena1
$cena_vnutro1 += $cena_polica1 * 6 // to je totez, az na to, ze tohle budes
// mit uvnitr ifu, takze ti nenastane stejny pripad
Zobrazeno 8 zpráv z 8.