Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Segregacja zarówno wedle nazw jak i liczb
Forum PHP.pl > Forum > PHP
Gigante
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
JoShiMa
W manualu jest opisana funkcja która z pewnością Ci pomoże: array-keys
nowotny
A co array_keys ma do tego...? chyba raczej array_search" title="Zobacz w manualu PHP" target="_manual...
Hazel
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.
ddiceman
  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. ?>
Hazel
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.
kampio
  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];
JoShiMa
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
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.