Diskuze: výpočty v tabulce
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 21 zpráv z 21.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
napr.na toto jsi koukl? treba
http://www.itnetwork.cz/…gacni-funkce
Jo to je varianta pro součty, ale do pole stav_km ukládám stav pocitadla km při tankování. Tzn. Odecist predchozi stav km od aktualniho stavu
Ahoj, nezlob se na mě, ale to jsi doplnil až teď...
Já být Tebou, tak sem nejdříve pořádně rozepíšu, co chceš vlastně udělat, případně co a jak se tam počítá. Klidně můžeš uvést i větší část kódu a pokud je to tabulka, tak názorný obrázek s popisy by vůbec neuškodil. Teprve potom Ti tu bude někdo schopen patřičně pomoci.
Nic jsem nedoplnoval, dotaz je polozen od zacatku porad stejne. Ale cim vic nad tim premyslim tak tim vic si myslim ze timto cyklem while to nepude.
tady je obrázek aby byl dotaz pochopen... potřeboval bych spočítat sloupec Ujeto km... tzn. odečíst řádek ID 12 - 11 ; 11-10 ; 10 - 9
data jsou vymyšlená jen pro potřeby vyvoje
nikdo nevíte jak na to? ještě by byla možnost ukládat počáteční a konečný stav ale to bych nechtěl... napadlo mě vždy hodnotu toho řádku uložit do pom. proměnné a pak v dalším cyklu to odečíst, což jde, ale potřeboval bych to hodit o řádek výš... viz obrázek
Průměrnou spotřebu můžeš počítat pouze když vezmeš plnou. Tak je myšleno to dokankovávání třeba po těch 5 - 10 litrech? Průměrnou spotřebu můžeš spočítat vždy jen zpětně k minulému tankování. Tedy, když máš 0 km najeto a vezmeš plnou, a při druhém tankování opět vezmeš plnou, můžeš ze stávajícího množství najetých kilometrů vypočítat průměrnou spotřebu. V tom případě, ti bohatě stačí, si vytvořit proměnou, která ti podrží stav tachometru z předchozího řádku tabulky, pak rozdíl mezi stávajícím stavem vydělíš množstvím tankovaného paliva. ALE. Musí to být fakt plná nádrž. Protože, když najedu 1000 km na plnou nádrž a pak natankuji jen 5 litrů. Těžko můžu mít spotřebu 0,5l/100km. Otázkou tedy je, zda výpočet průměrné spotřeby je položka, kterou můžeš seriozně počítat. Respektive, smysl by to mělo co se týká dlouhodobé spotřeby. Tedy, třeba z pohledu měsíční spotřeby, nebo roční. To už je na tobě...
já tankuji vždy do plné... takže to je v pohodě... spíš mě šlo o to jak docílit toho aby se počítaly ujeté km mezi tankováním
Tedy ta pomocná proměnná. Co ti přenese údaj do dalšího řádku...
jo to už mám, ale potřeboval bych ty ujeté km posunout o řádek výš... mrkni na obrázek
Zkus sem hodit ten kód, kterej generuje to na obrázku.
zde je zdroj
<?php
$select = "SELECT * FROM tankovani order by stav_km desc";
$result = mysqli_query($con, $select);
$ujeto=0;
$prumer=0;
$litru_celkem=0;
$prumer_cena= 0;
$pocet = mysqli_num_rows($result);
$pomoc = 0;
while($radek=mysqli_fetch_array($result)){
$ujeto = $pomoc - $radek[2];
echo "<tr><td>".htmlspecialchars($radek[0])."</td>"; //id
echo "<td>".date("d.m.Y",strtotime($radek[1]))."</td>"; //datum
echo "<td>".htmlspecialchars($radek[2])."</td>";//poc stav
echo "<td>".htmlspecialchars($ujeto)."</td>"; //ujeto celkem mezi jednotlivými tankováními
echo "<td>".htmlspecialchars($radek[3])."</td>"; //
echo "<td>".htmlspecialchars($radek[4])."</td>"; //
//kod pro výpočet průměrné spotřeby za období
echo "<td>".htmlspecialchars($prumer)."</td>"; //
echo "<td>".htmlspecialchars($radek[5])."</td>"; //
echo "<td>".htmlspecialchars($radek[6])."</td></tr>"; //
$litru_celkem+= $radek[3];
$prumer_cena += $radek[4];
$sum = $prumer_cena/$pocet;
$pomoc = $radek[2];
}
echo "<tr><td colspan=9 bgcolor='#a52a2a'></td></tr>";
echo"<tr><td>Celkem: " .$pocet."</td>";
echo"<td></td>";
echo"<td></td>";
echo"<td>". $ujeto."</td>";
echo"<td>".$litru_celkem."</td>";
echo"<td>Průměr: ".$sum."</td>";
echo"<td>".$prumer. "</td>";
echo"<td></td>";
echo"<td></td></tr>";
?>
</tbody>
</table>
přesně tak... taky si myslím že to bude chtít něco sofistikovanějšího, proto taky tady žádám o pomoc... napadá tě něco?
Žádný pěkný řešení mě aktuálně nenapadá, ale napadlo mě třeba ukládat si do pole hodnoty, který chci vypsat a vypsat to až v dalším průchodu (a potom samozřejmě poslední řádek vypsat po konci cyklu, protože v cyklu k němu nedojdeš).
(tzn. že v prvním průchodu cyklu se jen uloží hodnoty a nic se nevypíše, ve druhým průchodu cyklu se vypíše druhý řádek, v posledním průchodu cyklu se vypíše předposlední řádek a po cyklu se vypíše poslední)
když jsem začal s programováním ve vb.net dělal jsem stejnou app, a tam to bylo vcelku v pohodě.. dalo se říct, že chci procházet řádek-1, ale tady v PHP to asi nejde co?
šlo by to projít cyklem for() a tam s tím nějak pracovat
<?php
$select = "SELECT * FROM tankovani order by stav_km desc";
$result = mysqli_query($con, $select);
$ujeto = 0;
$prumer = 0;
$litru_celkem = 0;
$prumer_cena = 0;
$pocet = mysqli_num_rows($result);
$pomoc = 0;
$vypis = array();
$pruchod = 0;
while ($radek = mysqli_fetch_array($result)) {
if ($pruchod > 0) {
echo "<tr><td>" . $vypis["id"] . "</td>"; //id
echo "<td>" . $vypis["datum"] . "</td>"; //datum
echo "<td>" . $vypis["km"] . "</td>";//poc stav
echo "<td>" . ($pomoc - $vypis["ujeto"]) . "</td>"; //ujeto celkem mezi jednotlivými tankováními
echo "<td>" . $vypis["litry"] . "</td>"; //
echo "<td>" . $vypis["litr"] . "</td>"; //
//kod pro výpočet průměrné spotřeby za období
echo "<td>" . $vypis["prumer"] . "</td>"; //
echo "<td>" . $vypis["misto"] . "</td>"; //
echo "<td>" . $vypis["poznamka"] . "</td></tr>"; //
}
$vypis["id"] = htmlspecialchars($radek[0]); // ID
$vypis["datum"] = date("d.m.Y", strtotime($radek[1])); // Datum
$vypis["km"] = htmlspecialchars($radek[2]); // Kilometry
$vypis["ujeto"] = ""; // Ujeto km
$vypis["litry"] = htmlspecialchars($radek[3]); // Litry
$vypis["litr"] = htmlspecialchars($radek[4]); // Cena za litr
$vypis["prumer"] = htmlspecialchars($prumer); // Průměr/100
$vypis["misto"] = htmlspecialchars($radek[5]); // Místo
$vypis["poznamka"] = htmlspecialchars($radek[6]); // Poznámka
$litru_celkem += $radek[3];
$prumer_cena += $radek[4];
$sum = $prumer_cena / $pocet;
$pomoc = $radek[2];
$pruchod++;
}
echo "<tr><td colspan=9 bgcolor='#a52a2a'></td></tr>";
echo "<tr><td>Celkem: " . $pocet . "</td>";
echo "<td></td>";
echo "<td></td>";
echo "<td>" . $ujeto . "</td>";
echo "<td>" . $litru_celkem . "</td>";
echo "<td>Průměr: " . $sum . "</td>";
echo "<td>" . $prumer . "</td>";
echo "<td></td>";
echo "<td></td></tr>";
?>
</tbody>
</table>
Něco takovýho třeba?
(chybí tam ještě ten poslední průchod za cyklem)
jo už jsem to nějak zkouším podle tvého nápadu... vyzkouším a dám vědět jak to dopadlo díky moc
Nedalo mi to. Předpokládám, že zadaná data jsou orientační (spotřeba vychází podle zadaných dat, která jsem okopíroval do pole)
<?php
/* sloupce tabulky
0 - datum
1 = stav km
2 = tankovano
3 = cena PHM
4 = sloupec pro pocet najetych km od minuleho tankovani / doplneno cyklem
5 = misto tankovani
6 = sloupec pro prumer spotreby
*/
$data = array(
13 => array("17.6.2016",1400,40,29.9,0,"Brno",0),
12 => array("17.6.2016",1300,50,26,0,"Blucina",0),
11 => array("17.6.2016",310,2,31,0,"",0),
10 => array("17.6.2016",300,5,20,0,"",0),
9 => array("4.6.2016",250,5,25,0,"Brno",0),
8 => array("1.6.2016",0,20,25,0,"Brno",0),
);
ksort($data);
$predchozi = 0; // pomocna promenna
$predchozi2 = 0; // pomocna promenna
foreach($data as $key => $radek){
$data[$key][4] = $radek[1] - $predchozi; //najeto
$ujeto = $radek[1] - $predchozi; //ujeto od minuleho tankovani
$data[$key][6] = round(($predchozi2>0)?($predchozi2 / ($ujeto / 100)):0,2); //prumer
$predchozi = $radek[1]; //pomocna promenna pro kilometry
$predchozi2 = $radek[2]; //pomocna promenna pro prumernou spotrebu
}
krsort($data);
echo "<style>td, th {border-collapse: collapse; border: 1px solid #000; }</style><table style='border-collapse: collapse'>
<tr><th>ID</th><th>Datum</th><th>Stav km pri tankovani</th><th>Najeto od minula</th><th>Tankovano</th><th>Prumer spotreba</th><th>Cena</th><th>Místo</th>";
foreach($data as $key => $radek)
{
echo "<tr><td>$key</td><td>$radek[0]</td><td>$radek[1]</td><td>$radek[4]</td><td>$radek[2]</td><td>$radek[6]</td><td>$radek[3]</td><td>$radek[5]</td></tr>";
}
echo "<tr><td>Celkem polozek: ".count($data)."</td><td></td><td></td><td></td><td>Tankovano celkem: ".array_sum(array_column($data,2))."</td><td>Prumerna spotreba: ".(array_sum(array_column($data,6))/count($data))."</td><td></td><td></td></tr></table>";
?>
Výsledná tabulka pak vypadá takto:
Ahoj ano data jsou vymyslena... Ale super prace. Takhle by to melo vypadat... Vcera jsem na to uz nemel silu, dnes to snad dotahnu... Diky vsem
Zobrazeno 21 zpráv z 21.