Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Poprzedni i nastepny element tablicy
sadistic_son
post
Post #1





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


Mam przykładową tablicę:
  1. $tab[0]='zero';
  2. $tab[1]='jeden';
  3. $tab[2]='dwa';
  4. $tab[3]='trzy';
  5. //itd
oraz zmienną $_GET['value'] o wartości np 'dwa'.
Potrzebuję dwóch funkcji które:
1) zwrócą mi wartość elementu poprzedzającego ten z wartością z $_GET
2) zwrócą mi wartość elementu następnego po tym z wartością z $_GET

Czyli dla $_GET['value']='dwa' potrzebuję uzyskać $prev='jeden' ($prev=$tab[1]) oraz $next='trzy' ($prev=$tab[3]). Manual prześledziłem i zainteresowały mnie funkcje prev , next oraz current ale nie bardzo wyszło mi zastosowanie ich. Nie byłoby problemu gdybym wiedział jak ustawić wewnętrzy wskaźnik tablicy na elemencie wskazanym przeze mnie poprzez wartość.
Od biedy funkcje te mogłyby zwracać klucze/indexy tych elementów.

EDIT: zrobiłem tak:
  1. $i=0;
  2. foreach($tab as $f){
  3. if($i==1){
  4. $next=$f;
  5. break;
  6. }
  7. if($f==$_GET['value']){
  8. $i=1;
  9. }
  10. }
  11. $i=0;
  12. $reverse=array_reverse($tab);
  13. foreach($reverse as $f){
  14. if($i==1){
  15. $prev=$f;
  16. break;
  17. }
  18. if($f==$_GET['value']){
  19. $i=1;
  20. }
  21. }
Działa ale nie podoba mi to rozwiązanie. Na pewno jest krótsze i bardziej optymalne wyjście. Jest?

Ten post edytował sadistic_son 24.12.2010, 06:23:25


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
potreb
post
Post #2





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

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


http://php.net/manual/en/function.next.php


--------------------

Go to the top of the page
+Quote Post
webdice
post
Post #3


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




  1. $tab[array_search( 'dwa', $tab ) - 1]; // Poprzedni
  2. $tab[array_search( 'dwa', $tab ) + 1]; // Następny


Pytanie tylko czy indeksy są po kolei. Dodatkowo musisz sprawdzić czy dany element jest pierwszy/ostatni.
Go to the top of the page
+Quote Post
Dopler
post
Post #4





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 30.01.2008

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


Mam problem podobny - ale nie wiem czy tutaj da się zastosować podobne rozwiązanie
Ciągle mi nie wychodzi

mam:

$getWord=mysql_query("SELECT .....);
if($getWordArray=mysql_fetch_array($getWord))
{
while ($let = mysql_fetch_assoc($getWord))
{
printf($let["id"]);
a tu bym chciał printf poprzedniego id
}

i żadne triki nie działają. Wyświetla się tylko jeśli daję current - ale ani prev, ani next ani inne metody nie działają. Niekiedy prev i next zwracają też current. Rozumiem że pętla działa dla każdego elementu oddzielnie - ale nie ma sposobu aby zapamiętać i pobrać poprzedni (tak na prawdę chodzi mi o porównanie dwóch i wykonanie akcji w zależności od rezultatu. Acha - tablica jest po pytaniu z GROUP BY

====================

właśnie rozwiązałem - podaję przykład - (ale nie wiem czy tak jest dobrze) - w każdym razie działa


$getWord=mysql_query(...);
if($getWordArray=mysql_fetch_array($getWord))
{
previous = '';
while ($let = mysql_fetch_assoc($getWord)) {

$current = $let['id'];
if ($current == $previous) {
echo "bla";
}

inne działania zależne na każdym elemencie

$previous = $current;

}

Ten post edytował Dopler 31.05.2013, 00:19:45


--------------------
Genealogia Polaków
Go to the top of the page
+Quote Post
--silwanus82--
post
Post #5





Goście







  1. $prev_site_id=0;
  2. $next_site_id=0;
  3.  
  4. $found=false;
  5. foreach ($sites as $sid =>$s){
  6. if($sid!=$site_id){
  7. if(!$found) $prev_site_id=$sid;
  8. else{
  9. $next_site_id=$sid;
  10. break;
  11. }
  12. }else{
  13. $found=true;
  14. }
  15. }
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 Aktualny czas: 20.08.2025 - 11:16