Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Dynamiczne sprawdzenie ostatniego elementu tablicy
mattix19
post 9.12.2011, 01:08:33
Post #1





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 11.07.2010

Ostrzeżenie: (0%)
-----


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


--------------------
CI
Go to the top of the page
+Quote Post
CuteOne
post 9.12.2011, 01:14:17
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


najpierw w while() zapisujesz dane do tablicy następnie sprawdzasz je w za pomocą end()
Go to the top of the page
+Quote Post
Adi32
post 9.12.2011, 08:16:07
Post #3





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Adi32 9.12.2011, 08:16:51


--------------------
Wolałem języki z rodziny C ale poszedłem na łatwizne...
Go to the top of the page
+Quote Post
Prezi2907
post 9.12.2011, 08:30:21
Post #4





Grupa: Zarejestrowani
Postów: 107
Pomógł: 4
Dołączył: 11.08.2010
Skąd: Inowrocław

Ostrzeżenie: (10%)
X----


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.  



Ten post edytował Prezi2907 9.12.2011, 08:22:42
Go to the top of the page
+Quote Post
Adi32
post 9.12.2011, 10:46:24
Post #5





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Poza tematem:
Dzięki za uwagę Prezi - dobrze wiedzieć. Zaktualizowałem swoje funkcje.


--------------------
Wolałem języki z rodziny C ale poszedłem na łatwizne...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.06.2025 - 06:28