Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Segregacja zarówno wedle nazw jak i liczb
Gigante
post 30.07.2008, 07:38:46
Post #1





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 29.09.2006
Skąd: Oława

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


Mam prosta tabele:
  1. <?php
  2. function posegreguj($segregacja)
  3. {
  4. $segregacje = array (
  5. '--wybierz--',
  6. 'najstarsze',
  7. 'najnowsze',
  8. 'najlepsze',
  9. 'najgorsze',
  10. 'bez ocen'
  11. );
  12.  
  13. return $segregacje[$segregacja];
  14. }
  15. ?>


wywolujac np: posegreguj(2) dostaje pozycje najnowsze

wywolujac np: posegreguj(najlepsze) chce dostac ktore miejsce w tabeli zajmuje to slowo (czyli: sytuacja odwrotna)... jak ? Najlepiej bez tworzenia nowej tabeli smile.gif

Ten post edytował Gigante 30.07.2008, 07:39:55
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
JoShiMa
post 30.07.2008, 08:30:32
Post #2





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


W manualu jest opisana funkcja która z pewnością Ci pomoże: array-keys


--------------------
Go to the top of the page
+Quote Post
nowotny
post 30.07.2008, 11:46:28
Post #3





Grupa: Zarejestrowani
Postów: 875
Pomógł: 122
Dołączył: 2.02.2008

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


A co array_keys ma do tego...? chyba raczej array_search" title="Zobacz w manualu PHP" target="_manual...

Ten post edytował nowotny 30.07.2008, 11:46:43
Go to the top of the page
+Quote Post
Hazel
post 30.07.2008, 11:47:12
Post #4





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

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


Szczerze nie wiem, w czym mogłoby mu pomóc array_keys(), pewnie się nie znam, ale nie umiem tego wykombinować, sorry.

Dam swój kod, chyba działa.

  1. <?php
  2. function posegreguj($segregacja)
  3. {
  4.    $segregacje = array (
  5.    '--wybierz--',
  6.    'najstarsze',
  7.    'najnowsze',
  8.    'najlepsze',
  9.    'najgorsze',
  10.    'bez ocen'
  11.    );
  12.  if (!intval($segregacja))
  13.  {
  14.   for ($i=0; $i<count($segregacje); $i++)
  15.   {
  16.   if ($segregacja == $segregacje[$i])
  17.   {
  18.   return $i;
  19.   }
  20.   }
  21.  }
  22.    return $segregacje[$segregacja];
  23. }
  24.  
  25. echo posegreguj(2); //zwraca 'najnowsze'
  26.  
  27. echo posegreguj('najnowsze'); //zwraca 2
  28. ?>




Z tym że nazwa funkcji jest dość nieadekwatna chyba, w takiej wersji ona niczego nie segreguje raczej...

edit: heheh, właśnie zaimplementowałem array_search. Nie przepadam za stosowaniem tysiąca wbudowanych funkcji tablicowych, bo trzeba je znać na pamięć, a napisanie każdej sprowadza się do 2 minut pracy. No ale cóż, poznałem nową funkcję, array_serach faktycznie w tym przypadku jest dobre.

Ten post edytował Hazel 30.07.2008, 11:54:11


--------------------
Go to the top of the page
+Quote Post
ddiceman
post 30.07.2008, 11:53:12
Post #5





Grupa: Zarejestrowani
Postów: 326
Pomógł: 121
Dołączył: 23.07.2008
Skąd: Wrocław

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


  1. <?php
  2. function posegreguj($segregacja)
  3. {
  4. $segregacje = array (
  5. '--wybierz--',
  6. 'najstarsze',
  7. 'najnowsze',
  8. 'najlepsze',
  9. 'najgorsze',
  10. 'bez ocen'
  11. );
  12.  
  13. if(is_string($segregacja)) $segregacje = array_flip($segregacje);
  14.  
  15. return $segregacje[$segregacja];
  16. }
  17. ?>
Go to the top of the page
+Quote Post
Hazel
post 30.07.2008, 11:56:51
Post #6





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

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


Haha, jeszcze lepiej, następna funkcja tablicowa, array_flip. Tylko pamiętaj, że w PHP typy nie są sztywne, wystarczy zamiast posegreguj(2) napisać posegreguj($zmienna_pobrana_z_bazy_teoretycznie_numeryczna) i ta zmienna może być typu string(1) "2". Więc zabezpieczenie może nie być wystarczające. Nie wiesz, do czego będzie używana funkcja posegreguj, to niekoniecznie muszą być wywołania stałej liczby będącej typu numerycznego.


--------------------
Go to the top of the page
+Quote Post
kampio
post 30.07.2008, 12:01:22
Post #7





Grupa: Zarejestrowani
Postów: 15
Pomógł: 1
Dołączył: 22.07.2008

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


  1. <?php
  2. function posegreguj($segregacja)
  3. {
  4. $segregacje = array (
  5. '--wybierz--',
  6. 'najstarsze',
  7. 'najnowsze',
  8. 'najlepsze',
  9. 'najgorsze',
  10. 'bez ocen'
  11. );
  12.  
  13. if(is_int($segregacja)) return $segregacje[$segregacja];
  14. else return array_search($segregacja,$segregacje);
  15. }
  16. echo posegreguj(1);
  17. echo posegreguj("bez ocen");
  18. ?>
  19.  
  20. zamiast is_int mozna dac: if(ereg('^[0-9]+$',$segregacja)) return $segregacje[$segregacja];


Ten post edytował kampio 30.07.2008, 12:04:55
Go to the top of the page
+Quote Post
JoShiMa
post 30.07.2008, 12:12:26
Post #8





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


Cytat(Hazel @ 30.07.2008, 12:47:12 ) *
Szczerze nie wiem, w czym mogłoby mu pomóc array_keys(), pewnie się nie znam, ale nie umiem tego wykombinować, sorry.

Wystarczy przeczytać, że jak się wykorzysta drugi opcjonalny parametr, to się w wyniku dostaje klucze pod którymi jest szukana wartość. To nie trudne


--------------------
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: 19.07.2025 - 06:16