Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Poprzedni i nastepny element tablicy
Forum PHP.pl > Forum > Przedszkole
sadistic_son
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?
potreb
http://php.net/manual/en/function.next.php
webdice
  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.
Dopler
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;

}
-silwanus82-
  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. }
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.