Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [MySQL][PHP]Tablica z przedziałem wartości z BD
brzanek
post 19.11.2018, 16:43:21
Post #1





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


Witam napotkałem problem przy tworzeniu tablicy array
  1. $iconwiatr=array(
  2. '>=90 && <100' => "wiatr_poludnie",
  3. '>=100 && <120' => "wiatr_polnoc"
  4. );

Tym sposobem wyświetlam odpowiednią ikonkę
  1. $wiatrikona = imagecreatefrompng('http://brzanek.webd.pl/2019/strona/prognoza/images/'.$iconwiatr[($row['wwindBearing'])].'.png');

Niestety wywala mi błąd
  1. Notice: Undefined offset: 97 in /home/brzanek/public_html/2019/strona/prognoza/temperatura.php on line 150 Warning: imagecreatefrompng(http://brzanek.webd.pl/2019/strona/prognoza/images/.png): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/brzanek/public_html/2019/strona/prognoza/temperatura.php on line 150 Warning: imagecopy() expects parameter 2 to be resource, boolean given in /home/brzanek/public_html/2019/strona/prognoza/temperatura.php on line 196

W bazie danych wartość wwindBearing = 97 więc powinna być widoczna ikona bo ta wartość znajduje się w tym przedziale >=90 && <100
Go to the top of the page
+Quote Post
trueblue
post 19.11.2018, 16:55:13
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Naprawdę uważasz, że jeśli przypiszesz elementowi tablicy klucz '>=90 && <100', to podając 97 wybierzesz właśnie ten element?
Powinieneś utworzyć tablicę gdzie kluczami są wartości z dołu lub góry zakresu - w zależności od sposobu podejścia do wybierania.


--------------------
Go to the top of the page
+Quote Post
brzanek
post 19.11.2018, 17:25:30
Post #3





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


Ale zakres to od 0 do 360 Chyba jest jakiś inny sposób aby zrobić to w danym zakresie np:
od 0 do 70
od 70 do 140
od 140 do 190
od 190 do 260
od 260 do 330
od 330 do 360
Go to the top of the page
+Quote Post
trueblue
post 19.11.2018, 17:43:12
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Przykład, który pokazujesz, to nie zakres od 0 do 360, ale kilka zakresów. Rozwiązanie podałem Ci wyżej.


--------------------
Go to the top of the page
+Quote Post
brzanek
post 19.11.2018, 17:58:56
Post #5





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


Możesz jaśniej.
Pobierana wartość z bazy danych jest w zakresie od 0 do 360 więc może być to liczba w tym zakresie.
Mam to tak robić?
  1. $iconwiatr=array(
  2. ...
  3. '97' => "wiatr_poludnie",
  4. '96' => "wiatr_poludnie",
  5. '95' => "wiatr_poludnie",
  6. '94' => "wiatr_polnoc",
  7. '93' => "wiatr_polnocnyzachod"
  8. ...
  9. );
Go to the top of the page
+Quote Post
trueblue
post 19.11.2018, 18:09:36
Post #6





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Tablicę z ikonami powinieneś zbudować tak, aby kluczem była dolna lub górna wartość przedziału. Nie przedziału, w którym zawiera się badana liczba, lecz przedziału, z którym porównujesz. Czyli tabela, którą pokazałeś na początku, i o której cały czas piszę, że jest niepoprawnie zbudowana.


--------------------
Go to the top of the page
+Quote Post
brzanek
post 19.11.2018, 19:24:26
Post #7





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


Teraz to już nic nie kumam zakręciłeś mnie w tym wszystkim.
Podaj mi jakiś przykład z podobnymi wartościami to może lepiej mi to wejdzie, bo po twoim ostatnim poście jestem zakręcony jak ...
Go to the top of the page
+Quote Post
trueblue
post 19.11.2018, 19:26:11
Post #8





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Tyle już jesteś na forum...

  1. $iconwiatr=array(
  2. '90' => "wiatr_poludnie",
  3. '100' => "wiatr_polnoc"
  4. );


--------------------
Go to the top of the page
+Quote Post
brzanek
post 19.11.2018, 19:42:47
Post #9





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


Niestety tak nie zadziała bo potrzeba jest dokładna wartość nie tylko 90 ale w tym przypadku 97.

Ten post edytował brzanek 19.11.2018, 19:44:11
Go to the top of the page
+Quote Post
trueblue
post 19.11.2018, 19:46:33
Post #10





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


A nie wydaje Ci się, że 97 wpada w przedział między 90 a 100? Czyli powinieneś na podstawie tej tabeli podstawić ikonę wiatr_poludnie?
Jak sobie zbudujesz przedziały, to już Twoja sprawa. Na pewno nie ma kompletnie sensu robienie czegoś takiego:
  1. '97' => "wiatr_poludnie",
  2. '96' => "wiatr_poludnie",
  3. '95' => "wiatr_poludnie",

Jeszcze raz: jako klucz tabeli ma być dolna, albo górna granica przedziału.


--------------------
Go to the top of the page
+Quote Post
brzanek
post 19.11.2018, 19:46:49
Post #11





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


Może inaczej mam 8 ikonek z kierunkiem wiatru. W bazie danych kierunek wiatru wyrażany jest w stopniach od 0 do 360. Potrzebuję wyświetlać ikonę z kierunkiem wiatru ale nie co 1 stopień tylko np. co 25 stopni - dlatego potrzebny jest mi przedział w tablicy.
Go to the top of the page
+Quote Post
trueblue
post 19.11.2018, 19:51:07
Post #12





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


To sobie zbuduj tablicę z przedziałami co 25, a nie co 10.


--------------------
Go to the top of the page
+Quote Post
brzanek
post 19.11.2018, 20:03:44
Post #13





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


Co 25 czyli?
  1. $iconwiatr=array(
  2. '25' => "wiatr_poludnie",
  3. '50' => "wiatr_polnoc",
  4. '75' => "wiatr_polnoc"
  5. );

Jeszcze raz podkreślam, że tak to nie działa.
Tym wywołaniem wyświetlam ikonę
  1. $result = $mysqli->query("SELECT * FROM prognoza WHERE wid_miasto =9 ORDER BY id ASC LIMIT 1");
  2. while ( $row = mysqli_fetch_array($result) ) {
  3. $wiatrikona = imagecreatefrompng('http://brzanek.webd.pl/2019/strona/prognoza/images/'.$iconwiatr[($row['wwindBearing'])].'.png');
  4. }

Jeśli teraz wwindBearing wynosi 74 to ta tablica
  1. $iconwiatr=array(
  2. '25' => "wiatr_poludnie",
  3. '50' => "wiatr_polnoc",
  4. '75' => "wiatr_polnoc"
  5. );

nie zadziała bo nie ma w niej wartości 74.
Go to the top of the page
+Quote Post
trueblue
post 19.11.2018, 20:05:29
Post #14





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Cytat(trueblue @ 19.11.2018, 19:46:33 ) *
A nie wydaje Ci się, że 97 wpada w przedział między 90 a 100? Czyli powinieneś na podstawie tej tabeli podstawić ikonę wiatr_poludnie?

A 74 gdzie wpada? Nie przyszło Ci na myśl, który element z tablicy wybrać na podstawie zadanej wartości?


--------------------
Go to the top of the page
+Quote Post
brzanek
post 19.11.2018, 20:13:03
Post #15





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


Chyba mam dzisiaj ciężki dzień bo coraz gorzej mi to idzie.
Kombinuję jeszcze z tym
  1. foreach (range(90, 100) as $liczba) {
  2. echo $liczba;
  3. }
  4.  
  5. $iconwiatr=array(
  6. $liczba = "wiatr_poludnie"
  7. );
Go to the top of the page
+Quote Post
trueblue
post 19.11.2018, 20:16:28
Post #16





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Fatalnie.

Lecisz po tablicy, sprawdzasz czy zadana wartość jest większa lub równa od klucza pierwszego elementu, jeśli tak, to zapisujesz na boku wartość klucza. Przechodzisz do kolejnego elementu. Jeśli warunek w danym momencie nie jest spełniony, to klucz jest szukanym kluczem i wskazuje na odpowiedni przedział.

A skoro wykorzystujesz bazę danych, to zrób to jednym zapytaniem: http://kawalekkodu.pl/kochanie-trzeba-brac...-w-przedzialach


--------------------
Go to the top of the page
+Quote Post
brzanek
post 19.11.2018, 20:57:01
Post #17





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


Kombinuję trochę z zapytaniem
  1. $result = $mysqli->query("SELECT wtemperatureMax, wwindGust, wicon, wwindBearing AS wiatr, CASE WHEN wwindBearing>=50 AND wwindBearing<90 THEN 'wiatr_poludnie' WHEN wwindBearing>=90 AND wwindBearing<100 THEN 'wiatr_poludnie' WHERE wid_miasto =9 ORDER BY id ASC LIMIT 1");
  2. while ( $row = mysqli_fetch_array($result) ) {
  3. $tempmax14 = ''.$row['wtemperatureMax'].'';
  4. $ikona14 = ''.$icon[($row['wicon'])].'';
  5. $wiatr = ''.$row['wwindGust'].'';
  6. $wiatrikona = imagecreatefrompng('http://brzanek.webd.pl/2019/strona/prognoza/images/'.$row['wiatr'].'.png');
  7. $imagee14 = imagecreatefrompng('http://brzanek.webd.pl/2019/strona/prognoza/images/'.$row['wicon'].'.png');
  8. }

Ale pojawia mi się w tej linii błąd
Go to the top of the page
+Quote Post
trueblue
post 19.11.2018, 21:02:37
Post #18





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Serio chcesz tyle przedziałów pchać do jednego zapytania? Powodzenia...
Zobacz jak wygląda prawidłowa składnia funkcji CASE.


--------------------
Go to the top of the page
+Quote Post
brzanek
post 19.11.2018, 21:07:43
Post #19





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


Nie chcę ale kombinuję jak mogę.
Więc jak powinno to wyglądać z tablicą array?
Po twoich wypowiedziach niestety nic mi nie przychodzi do głowy.
Go to the top of the page
+Quote Post
trueblue
post 19.11.2018, 21:11:38
Post #20





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Nie przesadzaj podałem Ci dwa rozwiązania. W tym jednego gotowca, a Ty wymyślasz wciąż coraz bardziej karkołomne rozwiązania.

Pisałem o tym w poście nr 16. Sprawdzasz po kolei wartość z kluczami tablicy.


--------------------
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 25.04.2024 - 09:23