Wczytywanie linijka po linijce jest wolniejsze o ok 0,4s.
dane sa wczytane z pliku csv i odfiltrowane na podstawie daty i czasu. pozycje ktore spelniaja warunek (odpowiednia data i czas) sa zliczone i wyswietlone.
Jesli mozna to zrobic w jakis madrzejszy sposob to prosze o rade.
dodam jeszcze ze niejest to hosting tylko apache i php na slabszym PC postawione.
predkosc sortowania itd jest ok tylko czas ladowania z pliku chcialbym obciac... (plik aktualnie 2100kb)
Kod
if (file_exists("lista\aktu.txt")) { // jesli aktualizuje liste to:
exit("aktualizuje baze danych... prosze chwile poczekac i sprobowac ponownie <br />");
}
$ile_osob = 0;
$ile_biuro = 0;
$ile_tech = 0;
$ile_mag_drv= 0;
$stan_rok = $_REQUEST["rok"];
$stan_mies = $_REQUEST["miesiac"];
$stan_dzien= $_REQUEST["dzien"];
$stan_godz = $_REQUEST["godzina"];
$stan_minuta=$_REQUEST["minuta"];
$lista=array();
// ScriptTimer::timing_milestone('czytam plik');
$pliczek=file("lista\bibi_eksport.txt"); // czytaj do tablicy
foreach($pliczek as $test){ // kazdy element
$kawalki=explode(';',$test);
$os_nr=$kawalki[0];
$os_data_rok=$kawalki[1];
if($os_data_rok!=$stan_rok){ // jak data zla to nastepny element
continue;
}
$os_data_miesiac=$kawalki[2];
if($os_data_miesiac!=$stan_mies){
continue;
}
$os_data_dzien=$kawalki[3];
if($os_data_dzien!=$stan_dzien){
continue;
}
$os_godz_godz=$kawalki[4];
$os_godz_minuta=$kawalki[5];
if((int)$kawalki[6]==0){ // jesli data ok to godziny do tablic
$sprawdzam_in[$os_nr]=array("godz_in"=>$os_godz_godz,"min_in"=>$os_godz_minuta);
}else{
$sprawdzam_out[$os_nr]=array("godz_out"=>$os_godz_godz,"min_out"=>$os_godz_minuta);
};
array_push($lista,$os_nr); // dodaj pozycje
}
// ScriptTimer::timing_milestone('plik wczytany');
$lista=array_unique($lista); // posortuj i wyrzuc powtarzajace sie
sort($lista);
foreach($lista as $i){ // dla zostawionych elementow
if($sprawdzam_in[$i]["godz_in"]<=$sprawdzam_out[$i]["godz_out"]){ // jesli dzien to posortuj
if(spr_in($sprawdzam_in[$i]["godz_in"],$sprawdzam_in[$i]["min_in"],$stan_godz,$stan_minuta)){
if(spr_out($sprawdzam_out[$i]["godz_out"],$sprawdzam_out[$i]["min_out"],$stan_godz,$stan_minuta)){
if(w_liscie($li_biurowiec,$i)){ // wylap biurowych
$ile_biuro++;
}else{
if(w_liscie($li_tech,$i)){ // wylap technicznych
$ile_tech++;
}else{
if(w_liscie($li_mag_drv,$i)){ // wylap magaynierow i kierowcow
$ile_mag_drv++;
}else{
$ile_osob++; // reszta
}
}
}
}
}
}else{ // jesli noc to posortuj
if(spr_in($sprawdzam_in[$i]["godz_in"],$sprawdzam_in[$i]["min_in"],$stan_godz,$stan_minuta)){
if(w_liscie($li_biurowiec,$i)){
$ile_biuro++;
}else{
if(w_liscie($li_tech,$i)){
$ile_tech++;
}else{
if(w_liscie($li_mag_drv,$i)){
$ile_mag_drv++;
}else{
$ile_osob++;
}
}
}
}
if(spr_out($sprawdzam_out[$i]["godz_out"],$sprawdzam_out[$i]["min_out"],$stan_godz,$stan_minuta)){
if(w_liscie($li_biurowiec,$i)){
$ile_biuro++;
}else{
if(w_liscie($li_tech,$i)){
$ile_tech++;
}else{
if(w_liscie($li_mag_drv,$i)){
$ile_mag_drv++;
}else{
$ile_osob++;
}
}
}
}
}
}
oraz uzyte "funkcje"
Kod
function spr_in($in_h,$in_m,$set_h,$set_m){
if($in_h<$set_h){
return TRUE;
}
if($in_h==$set_h){
if($in_m<=$set_m)
return TRUE;
}
return FALSE;
}
function spr_out($out_h,$out_m,$set_h,$set_m){
if($out_h>$set_h){
return TRUE;
}
if($out_h==$set_h){
if($out_m>$set_m)
return TRUE;
}
return FALSE;
}
function w_liscie($list,$nr){
foreach($list as $i){
if($i==$nr)
return TRUE;
}
return FALSE;
}