Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: for() - optymalizacja skryptu
Forum PHP.pl > Forum > PHP
Joachim Peters
Witam,

Mam taki kawałek kodu w swojej klasie stronnicowania:
  1. <?php
  2. $count = ceil($this->totalRecords / $this->maxRecords);
  3. $j = (($this->recordStart / $this->maxRecords) > 1) ? $this->recordStart / $this->maxRecords : $count;
  4.  
  5. for($i = 0; $i < $count; $i++) {
  6. $pageId = ($i * $this->maxRecords);
  7. $pager .= ($pageId != $this->recordStart) ? '<a href="'.$pageId.'">'.($i + 1).'</a>&nbsp;' : '<b>'.($i + 1).'</b>&nbsp;';
  8.  
  9. if($i == 2) {
  10. if($count > 6) {
  11. if(($count - 3) >= $j) {
  12. $i = $j - 2;
  13. $pager .= '... ';
  14. } else {
  15. $i = $count - 4;
  16. $pager .= '... ';
  17. }
  18. }
  19. }
  20. if($i > $j && ($count - 3) >= $j) $d++;
  21. if($d == 1) break;
  22. }
  23. ?>

Walczę z nim już drugi dzień, ale ciągle zdarzają się błędy typu "Fatal error: Allowed memory size of". Macie sugestie co do tego kodu, jak go zoptymalizować?
Cysiaczek
Pokaż kod wyciągający dane z bazy - te, które stronicujesz. Głównie napisz jak pobierasz ilość rekordów z bazy dancch i czy potem przerzucasz je do tablic/obiektów

Pozdrawiam.
Joachim Peters
Testuje to jeszcze na "sucho", poprzez wprowadzenie do konstruktora ilości wszystkich rekordów i liczby wyświetlanych na jednej stronie.
zimi
Twój kod jest dla mnie zagadką
wstawmy sobie przykładowo dane
$this->recordStart = 90;
$this->maxRecords = 30;
$this->totalRecords = 317;
Stąd będziemy mieli:
$count = 11;
$j = 3;
dochodzimy w pętli do $i = 2 i wykonuję się warunek...
otrzymujemy: if(11-3>3) $i = 3 - 2 = 1;
i jedziemy znowu do for bo kolejne warunki się nie wykonują, znowu dostaniemy 2 znowu ten sam warunek i pętla nieskończona...

tak naprawdę nie mam pojęcia do czego służy zmienna $d i $j dość mało opisowe nazwy biggrin.gif:P

co do wykropkowywania stosujesz całą masę magicznych liczb smile.gif a więc w kod trzeba się wpatrzeć aby zrozumieć o co w nim chodzi,
ja do tego proponuję trochę inne rozwiązanie które kiedyś sobie wydumałem:
  1. <?php
  2. $stronyWidoczne = array( 1, 2, 3, $ileStron-2, $ileStron-1, $ileStron, $stronaAktualna-2, $stronaAktualna-1, $stronaAktualna, $stronaAktualna+1, $stronaAktualna+2);
  3. //inicjalizacja najprostsza z możliwych... można ją trochę zautymatyzować... bądź 
    zmodyfikować żeby była edytowalna...
  4. sort($stronyWidoczne);
  5. $poprzedniaStrona=0;
  6. foreach($stronyWidoczne as $numerStrony){
  7. if($numerStrony>0&&$numerStrony<=$ileStron){
  8. if($poprzedniaStrona+1==$numerStrony)
  9. {
  10. if($stronaAktualna!=$numerStrony)
  11. {
  12. $pager.='<a href="'.$numerStrony.'">'.$numerStrony.'</a> ';
  13. }
  14. else
  15. {
  16. $pager.='['.$numerStrony.'] ';
  17. }
  18. }
  19. else
  20. {
  21. $pager.='... <a href="'.$numerStrony.'">'.$numerStrony.'</a> ';
  22. }
  23. $poprzedniaStrona=$numerStrony;
  24. }
  25. }
  26. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.