Autor Zpráva
maniakum
Profil
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 *
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
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
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
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
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!

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: