Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przypisywanie przedziałom wartości słownej - tablica
pawdoh
post
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 29.12.2010

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


Witam mam następujący problem otóż, pobieram z bazy danych wartość będącą liczbą i teraz mam problem ponieważ potrzebuję to przypisać mam kod

  1. <?php
  2. $ranga = (
  3. range(0, 3999) => 'Początkujący',
  4. range(4000, 7999) => 'Młodzian',
  5. range(8000, 11999) => 'Doświadczony',
  6. range(12000, 20000) => 'Weteran',
  7. )
  8. ?>

następnie to przypisuje w pliku do którego załączam tą tablice, $ranga[$r[rank]]. I po tym właśnie zwraca mi błąd

Warning: Illegal offset type in ... on line 3,4,5,6

Bardzo bym prosił o pomoc gdyż jestem początkującym programistą i nie wiem za bardzo gdzie zrobiłem błąd. Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


  1. Oczywiście możesz zwrócić wartość domyślną w momencie kiedy nie da się określić innej, ale gdyby brak możliwości określenia rangi miał skutkować błędem to powinieneś wykorzystać wyjątek, bo nadaje się on do tego dobrze. I nie musi to być jakiś błąd krytyczny.
  2. Zwróć tylko uwagę na jedno: Twoje rozwiązanie jest lekko zdradzieckie, bo działanie kodu jest lekko nielogiczne. Najpierw jasno określasz konkretne przedziały dla danych rang, a później je ignorujesz. Tutaj nie jest to jakoś specjalnie groźne, bo jest to bardzo prosty przykład, ale w bardziej skomplikowanych przypadkach może to prowadzić do pewnych nieścisłości, zaciemnienia sposobu działania kodu, błędów itp. Innymi słowy: jest to zła praktyka.

    Tutaj lepszym pomysłem wydaje się bezpośrednie przewidzenie sytuacji, gdzie dana ranga ma dolny bądź górny przedział otwarty. Przez otwarty mam na myśli, plus minus nieskończoność, którą mógłbyś sygnalizować przy użyciu wartości NULL:
    1. static $ranges = array(
    2. 'Początkujący' => array(null, 3999),
    3. 'Doświadczony' => array(4000, 7999),
    4. 'Młodzian' => array(8000, 11999),
    5. 'Weteran' => array(12000, null)
    6. );
    Oczywiście późniejszy kod nieco się zmienia.

    Może Ci się to wydawać niepotrzebnym komplikowaniem kodu, ale w rzeczywistości sprawia to, że jego działanie jest łatwiejsze do zrozumienia.
Go to the top of the page
+Quote Post

Posty w temacie


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: 4.10.2025 - 16:43