Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Dynamiczne sprawdzenie ostatniego elementu tablicy
Forum PHP.pl > Forum > Przedszkole
mattix19
Witam
Stworzyłem sobie taki oto kod na potrzeby menu mojej stronki:
  1. $sql = 'SELECT * FROM pages';
  2. $query = mysql_query($sql) or die('Nie wykonałem polecenia '.$sql.mysql_error());
  3. if(mysql_num_rows($query) != 0){
  4. $this_page = basename($_SERVER['PHP_SELF']);
  5. while($row = mysql_fetch_array($query)){
  6. $pages = array($row['title']=>$row['link']);
  7. foreach($pages as $k=>$v){
  8. echo '<li ';
  9. if($this_page == $v) echo "id='current' ";
  10. if(end($pages)){echo 'class="last"';}else{echo ' ';}
  11. echo '><a href="'.$v.'"><span>'.$k.'</span></a></li>';
  12. } }
  13. }else{echo '<li id="current">Brak stron :(</li>';}


i chcialbym sprawdzic ostatni element mojej tablicy
  1. $pages
. Znalazlem w manualu funkcje
  1. end()
lecz jak logika nakazuje ostatni element wyswietli mi dopiero po skonczeniu sie petli while ale ja chcialbym to sprawdzic jeszcze w petli i wtedy przy pomocy if dopisac do li klasę. Wiem ze trzeba bedzie przerobic ten kod lecz nie mam pomyslu jak to zrobic, dlatego pytam tu. Nie prosze o gotowca lecz jedynie nakierowanie mnie jak to zmienic zebym zadzialalo
pozdrawiam
CuteOne
najpierw w while() zapisujesz dane do tablicy następnie sprawdzasz je w za pomocą end()
Adi32
Swego czasu uczyniłem takie funkcyjki:

  1. function first($array,$key)
  2. {
  3.  
  4. reset($array);
  5.  
  6. if(key($array) == $key)
  7. return true;
  8.  
  9. return false;
  10.  
  11. }
  12.  
  13. function last ($array,$key)
  14. {
  15.  
  16. end($array);
  17.  
  18. if(key($array) == $key)
  19. return true;
  20.  
  21. return false;
  22.  
  23. }


Sposób wykorzystania:

  1.  
  2. $array = array(
  3. key1 = value1,
  4. key2 = value2,
  5. key3 = value3,
  6. key4 = value4,
  7. );
  8.  
  9. foreach ($array as $key => $value) {
  10.  
  11. if (first($array,$key)) {
  12. // first element
  13. }
  14.  
  15. if (!first($array,$key)) {
  16. // not first element
  17. }
  18.  
  19. if (last($array,$key)) {
  20. // last element
  21. }
  22.  
  23. if (!last($array,$key)) {
  24. // not last element
  25. }
  26.  
  27. }
  28.  


A ruszają głową można uzyskać przedostatni element, drugi, 4 od końca itd.
Są małe problemy jak jest np 1 element.
Prezi2907
Cytat(mattix19 @ 9.12.2011, 01:08:33 ) *
Witam
Stworzyłem sobie taki oto kod na potrzeby menu mojej stronki:
  1. $sql = 'SELECT * FROM pages';
  2. $query = mysql_query($sql) or die('Nie wykonałem polecenia '.$sql.mysql_error());
  3. if(mysql_num_rows($query) != 0){
  4. $this_page = basename($_SERVER['PHP_SELF']);
  5. while($row = mysql_fetch_array($query)){
  6. $pages = array($row['title']=>$row['link']);
  7. foreach($pages as $k=>$v){
  8. echo '<li ';
  9. if($this_page == $v) echo "id='current' ";
  10. if(end($pages)){echo 'class="last"';}else{echo ' ';}
  11. echo '><a href="'.$v.'"><span>'.$k.'</span></a></li>';
  12. } }
  13. }else{echo '<li id="current">Brak stron :(</li>';}


i chcialbym sprawdzic ostatni element mojej tablicy
  1. $pages
. Znalazlem w manualu funkcje
  1. end()
lecz jak logika nakazuje ostatni element wyswietli mi dopiero po skonczeniu sie petli while ale ja chcialbym to sprawdzic jeszcze w petli i wtedy przy pomocy if dopisac do li klasę. Wiem ze trzeba bedzie przerobic ten kod lecz nie mam pomyslu jak to zrobic, dlatego pytam tu. Nie prosze o gotowca lecz jedynie nakierowanie mnie jak to zmienic zebym zadzialalo
pozdrawiam


  1.  
  2. $sql = 'SELECT title , link FROM pages';
  3. $a = 1;
  4. $query = mysql_query($sql) or die('Nie wykonałem polecenia '.$sql.mysql_error());
  5. $ile_pozycji = mysql_num_rows($query);
  6. if($ile_pozycji >= 1){
  7. $this_page = basename($_SERVER['PHP_SELF']);
  8. while($row = mysql_fetch_array($query)){
  9. $title = $row['title'];
  10. $link = $row['link'];
  11. echo '<li ';
  12. if($this_page == $link)
  13. echo "id='current' ";
  14. if($a == $ile_pozycji)
  15. echo 'class="last"';
  16. echo '><a href="'.$link.'"><span>'.$title.'</span></a></li>';
  17. $a++;
  18. }
  19. }
  20. else
  21. echo '<li id="current">Brak stron :(</li>';
  22.  


Taki utrudnianie sobie życia ... szukanie na siłę funkcji które w praktyce i tak nic nam nie dają... Jak coś istnieje to nie znaczy że jest to dobre. Kod pisany z ręki. Mogą być błędy.
Ta funkcja end() nigdy o niej nie słyszałem i jakoś żyłem dobrze bez niej... Radzę sobie bez tego i jak widać daję radę ;]
Gdybyś miał problem lub błędy wal na PW.

Cytat(Adi32 @ 9.12.2011, 08:16:07 ) *
Swego czasu uczyniłem takie funkcyjki:

  1. function first($array,$key)
  2. {
  3.  
  4. reset($array);
  5.  
  6. if(key($array) == $key)
  7. return true;
  8.  
  9. return false;
  10.  
  11. }
  12.  
  13. function last ($array,$key)
  14. {
  15.  
  16. end($array);
  17.  
  18. if(key($array) == $key)
  19. return true;
  20.  
  21. return false;
  22.  
  23. }


Sposób wykorzystania:

  1.  
  2. $array = array(
  3. key1 = value1,
  4. key2 = value2,
  5. key3 = value3,
  6. key4 = value4,
  7. );
  8.  
  9. foreach ($array as $key => $value) {
  10.  
  11. if (first($array,$key)) {
  12. // first element
  13. }
  14.  
  15. if (!first($array,$key)) {
  16. // not first element
  17. }
  18.  
  19. if (last($array,$key)) {
  20. // last element
  21. }
  22.  
  23. if (!last($array,$key)) {
  24. // not last element
  25. }
  26.  
  27. }
  28.  


A ruszają głową można uzyskać przedostatni element, drugi, 4 od końca itd.
Są małe problemy jak jest np 1 element.



Adi nie wątpię że znasz się na rzeczy ale to jest właśnie przykład utrudniania sobie kodu... Wystarczy jedna zmienna ( w tym przypadku $a) którą za każdym ruchem przeliczamy i nie ma szans z problemem odnośnie jednej lub miliona pozycji smile.gif A skrypt traci może 0,00000000000001 setną na dodanie do poprzedniej wartości $a jeden.

Prostsza wersja twojego kodu
  1.  
  2. function last($ilosc_pozycji , $obecna){
  3.  
  4. if ($ilosc_pozycji == $obecna)
  5. return true;
  6. else
  7. return false;
  8.  
  9. }
  10.  
  11.  
  12. // Używamy na kodzie kolegi który założył temat....
  13.  
  14. $sql = 'SELECT title , link FROM pages';
  15. $a = 1;
  16. $query = mysql_query($sql) or die('Nie wykonałem polecenia '.$sql.mysql_error());
  17. $ile_pozycji = mysql_num_rows($query);
  18. if($ile_pozycji >= 1){
  19. $this_page = basename($_SERVER['PHP_SELF']);
  20. while($row = mysql_fetch_array($query)){
  21. $title = $row['title'];
  22. $link = $row['link'];
  23. echo '<li ';
  24. if($this_page == $link)
  25. echo "id='current' ";
  26. if(last($ile_pozycji , $a) === true)
  27. echo 'class="last"';
  28. echo '><a href="'.$link.'"><span>'.$title.'</span></a></li>';
  29. $a++;
  30. }
  31. }
  32. else
  33. echo '<li id="current">Brak stron :(</li>';
  34.  
  35.  

Adi32
Poza tematem:
Dzięki za uwagę Prezi - dobrze wiedzieć. Zaktualizowałem swoje funkcje.
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.