Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
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
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 00:02