| 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 casZvlá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: 14 let
|
|||
0