Autor | Zpráva | ||
---|---|---|---|
maniakum Profil |
#1 · Zasláno: 11. 9. 2012, 16:00:31
Ahoj,
nyní používám fci number_format, ale je strašně pomalá, zkoušel jsem použít namísto této fce sprintf. Lze u této funkce nějak elegantně oddělovat tisíce? |
||
norman Profil * |
#2 · Zasláno: 11. 9. 2012, 18:28:13
Hele, rád bych Ti pomohl ovšem mohl by si to definovat "oddělovat tisíce", co vlastně od toho čekáš? Můžeš sem dát kus kódu jaký očekáváš výstup? Určitě bychom našli nějaké řešení....
|
||
maniakum Profil |
#3 · Zasláno: 11. 9. 2012, 19:12:03
Omlouvám se. Number_format mi z čísla 1234567890.12 děla 1,234,567,890.12. Tedy každý tisíc, sto tisíc, milion atd. oddělí desetinou čárkou. Jelikož generuju tabulku formátuju čísla, potřebuju oddělit des. čárkou. Problém je v tom, že number_format to dělá strašně pomalu ač tabulky nejsou velký ( 36 řádků po 5ti číslech, takže 180 čísel), kterou generuje 10 s, bez formátování to je hotový za 0,5 s.
|
||
Norman Profil |
#4 · Zasláno: 11. 9. 2012, 19:33:12
Tak prvně bych asi měl říci že to nebude fcí number format:
<?php //nacteme cas zacatku $time = microtime(true); //inicializujeme promene $i = 0; //nacteme 100 cisel while($i <= 500) { $cislo = rand(0, 999999999); //vygenerujeme random cislo $cislo = number_format($cislo, 2, ',', ' '); // zformatujem echo "$cislo \n <br>"; //vypisem $i++; } //odecteme zmereny cas $time = microtime(true) - $time; echo $time; //vypiseme zmereny cas Zvládlo to 500 čísel za 0.004 sec což si myslím že není špatné :), spíš dej kód ukážeme ti kde máš chybu... |
||
maniakum Profil |
#5 · Zasláno: 12. 9. 2012, 07:01:55
Norman:
$sql = "SELECT * FROM `".$jmeno."` WHERE ".$filtr_manager." ".$polozka." Datum_vzniku between '".$filtr_od."' AND '".$filtr_do."'"; $db = Mysql_query($sql); $pocet_radku = mysql_num_rows($db); $PC = 0; $SC = 0; $MNOZSTVI = 0; $OR = 0; for($i=0;$i<$pocet_radku;$i++){ $datum_vzniku = mysql_result($db, $i, 'Datum_vzniku'); $mnozstvi = mysql_result($db, $i, 'Mnozstvi'); $pc_celkem = mysql_result($db, $i, 'PC_celkem'); $sc_celkem = mysql_result($db, $i, 'SC_celkem'); $or_v_proc = mysql_result($db, $i, 'OR_v_proc'); $PC += $pc_celkem; $SC += $sc_celkem; $MNOZSTVI += $mnozstvi; } $PCSC = $PC - $SC; $OR = (1-($SC / $PC))*100; if($k%2==0){ $barva_radku = "#dce6f1"; } else{ $barva_radku = "#ffffff"; } echo " <tr bgcolor=\"$barva_radku\"> <td>".$date[1]."/".$date[0]."</td> <td align=\"right\">".number_format($PC,2,`.`,` `)." Kč</td> <td align=\"right\">".number_format($SC,2,`.`,` `)." Kč</td> <td align=\"right\">".number_format($OR,2,`.`,` `)."</td> <td align=\"right\">".number_format($MNOZSTVI,2,`.`,` `)."</td> <td align=\"right\">".number_format($PCSC,2,`.`,` `)." Kč</td> </tr>"; věřím tomu. Ale co by tady mělo být špatně? Když vyhodím number_format, najednou je to rychle. |
||
Tori Profil |
maniakum:
number_format($PC,2,`.`,` `) Tady mají být uvozovky nebo apostrofy, tohle je jiný operátor - nezpomaluje to tohle? Místo opakovaného použití mysql_result by mohlo být rychlejší použít mysql_fetch_assoc v cyklu while a čítač řádků si doplnit.
Kromě toho takhle vám to zobrazí jen poslední řádek nalezených dat, cyklus by měl končit asi až za řádkem 43. edit: Aha, už vidím, že to asi je záměr. V tom případě by možná šlo změnit SQL na SELECT SUM(Mnozstvi) 'mnozstvi', SUM(PC_celkem) 'PC_celkem', SUM(SC_celkem) 'SC_celkem' FROM ... , tak byste dostal jen jeden řádek už sečtených hodnot.
|
||
maniakum Profil |
#7 · Zasláno: 12. 9. 2012, 07:40:17
Tori:
Bylo to ono, vůbec jsem si toho nevšiml. Děkuji. Já potřebuju z DB postupně vybrat všechny položky, který odpovídají filtru a posčítat prodejní ceny. Nyní už je to generování kódu rychlé. Každopádně se na to podívám. Díky! |
||
Časová prodleva: 13 let
|
0