mboost-dp1
Reverse array
- Forside
- ⟨
- Forum
- ⟨
- Programmering
Er i gang med et php script til en graf-generator men jeg har et problem med at få vendt et array om. Arrayet er nogle målinger fra en vejrstation, og lige nu viser den dem omvendt - altså nyeste først.
Array_reverse ser sådan ud til at virke fint,
[73] => Array
(
[0] => 438
[1] => 192.00
)
[74] => Array
(
[0] => 444
[1] => 192.00
)
som er de sidste to i arrayet $points, bliver til
[0] => Array
(
[0] => 444
[1] => 192.00
)
[1] => Array
(
[0] => 438
[1] => 192.00
)
Men hvis jeg tegner grafen (med GD2) så ændrer den sig ikke, hvilket jeg ikke fatter, da den tegner det med denne funktion efter array_reverse:
for($i = 0; $i < $kolonner-1; $i++) {
imagelinethick($billede, $points[$i][0], $hoejde-$points[$i][1], $points[$i+1][0], $hoejde-$points[$i+1][1], $streg, $stregtykkelse);
}
(imagelinethick-funktionen svarer til imageline, laver bare 2 streger så den virker tykkere)
Er det forkert opfattet at arrayet BLIVER reversed og at forløkken tager dem i (nu) omvendt rækkefølge?
Der kan følges med her
http://www.it-skp.dk/vejr/
med de nederste links
Array_reverse ser sådan ud til at virke fint,
[73] => Array
(
[0] => 438
[1] => 192.00
)
[74] => Array
(
[0] => 444
[1] => 192.00
)
som er de sidste to i arrayet $points, bliver til
[0] => Array
(
[0] => 444
[1] => 192.00
)
[1] => Array
(
[0] => 438
[1] => 192.00
)
Men hvis jeg tegner grafen (med GD2) så ændrer den sig ikke, hvilket jeg ikke fatter, da den tegner det med denne funktion efter array_reverse:
for($i = 0; $i < $kolonner-1; $i++) {
imagelinethick($billede, $points[$i][0], $hoejde-$points[$i][1], $points[$i+1][0], $hoejde-$points[$i+1][1], $streg, $stregtykkelse);
}
(imagelinethick-funktionen svarer til imageline, laver bare 2 streger så den virker tykkere)
Er det forkert opfattet at arrayet BLIVER reversed og at forløkken tager dem i (nu) omvendt rækkefølge?
Der kan følges med her
http://www.it-skp.dk/vejr/
med de nederste links
Nu kan jeg ikke helt følge med i de arrays i et array, men hvorfor render du ikke bare baglæns?
for($i = $kolonner; $i >= 0; $i--)
...
for($i = $kolonner; $i >= 0; $i--)
...
Jo, jeg har også prøvet at smide dem over i temporære variabler og leget med dem og alt muligt, men nej.
Eneste forskel når jeg prøver at vende arrayet om er at GD ændrer grafen en lille bitte smule (den får nærmest fjernet de "skarpe kanter") men det er stadig de samme værdier.
Eneste forskel når jeg prøver at vende arrayet om er at GD ændrer grafen en lille bitte smule (den får nærmest fjernet de "skarpe kanter") men det er stadig de samme værdier.
#6: Ja, vi er enige om at værdierne i sig selv vil være de samme - men derfor kan en graf jo stadig vende den ene eller anden vej.
Altså om man plotter 1,1 2,2 3,3 4,4 5,5 eller 5,5 4,4 3,3 2,2 1,1 ind er jo ikke helt ligegyldigt (hvis man gør det i samme retning). Derfor vil jeg gerne have den til at tegne det baglæns.
Og eftersom den tæller $i op i $array[$i] så er det svært for mig at forstå at en array_reverse ikke virker, eftersom den returnerer et array, der for mig burde resultere i en "baglæns" graf (sådan som jeg gerne vil have den til at se ud)
Altså om man plotter 1,1 2,2 3,3 4,4 5,5 eller 5,5 4,4 3,3 2,2 1,1 ind er jo ikke helt ligegyldigt (hvis man gør det i samme retning). Derfor vil jeg gerne have den til at tegne det baglæns.
Og eftersom den tæller $i op i $array[$i] så er det svært for mig at forstå at en array_reverse ikke virker, eftersom den returnerer et array, der for mig burde resultere i en "baglæns" graf (sådan som jeg gerne vil have den til at se ud)
Nå men.. Jeg valgte at lave noget gejl med udlæsningen fra databasen i stedet, selv om det andet burde have været både nemmere og mere sikkert.
Det er efterhånden en hæderlig graf
http://www.it-skp.dk/vejr/?graf=luftfugtighed
Det er efterhånden en hæderlig graf
http://www.it-skp.dk/vejr/?graf=luftfugtighed
#7 Ronson:
Jeg er ikke sikker på, om du forstår mig, eller om jeg forstår dine data. For mig at se er det fuldkommen ligegyldigt, hvordan dine koordinatsæt plottes, for (5, 5) er det samme sted (målt fra origo - (0, 0) - uagtet om (1, 1) placeres før.
Men hvis det hele virker, så er det jo fint. Hvis du gerne vil have din gamle løsning til at virke, så skal du tage den samlede bredde og trække din x-værdi fra, så får du det samme resultat, da punkterne så spejles i forhold til y-aksen.
Jeg er ikke sikker på, om du forstår mig, eller om jeg forstår dine data. For mig at se er det fuldkommen ligegyldigt, hvordan dine koordinatsæt plottes, for (5, 5) er det samme sted (målt fra origo - (0, 0) - uagtet om (1, 1) placeres før.
Men hvis det hele virker, så er det jo fint. Hvis du gerne vil have din gamle løsning til at virke, så skal du tage den samlede bredde og trække din x-værdi fra, så får du det samme resultat, da punkterne så spejles i forhold til y-aksen.
Jeg tror jeg misforstod dig og i øvrigt udtrykker mig meget uklart :)
Men ja, du har nok ret. Det jeg mente var at den selv "udregner" x-aksen (tiden) da y-aksen (værdierne) er fra databasen. Og derved er rækkefølgen af værdierne ikke ligegyldig.
Det med at tage bredden og trække fra var det jeg forsøgte på efter #2 - går jeg da ud fra? Læs lige #2 og se om det ikke var det du tænkte på.
Men ja, du har nok ret. Det jeg mente var at den selv "udregner" x-aksen (tiden) da y-aksen (værdierne) er fra databasen. Og derved er rækkefølgen af værdierne ikke ligegyldig.
Det med at tage bredden og trække fra var det jeg forsøgte på efter #2 - går jeg da ud fra? Læs lige #2 og se om det ikke var det du tænkte på.
int imagelinethich ( resource image, int x1, int y1, int x2, int y2, int color )
Den værdi, som du angiver til x1, kommer fra første position i dit sub-array. Denne værdi er jo stadig knyttet til den samme y-værdi. Det, som du har behov for, er faktisk at kunne bytte om på alle værdierne på 2. position og samtidig beholde den 1. position.
for($i = 0; $i < $kolonner-1; $i++) {
imagelinethick($billede, $points[$kolonner-1-$i][0], $hoejde-$points[$i][1], $points[$kolonner-1-$i-1][0], $hoejde-$points[$i+1][1], $streg, $stregtykkelse);
}
Jeg har aldrig programmeret PHP, så det kan godt være, at der er en enkelt fejl, men som princip er det rigtigt, da du her tager din x-koordinat fra den modsatte ende af dit array.
Jeg ved ikke, hvordan x-koordinaterne kommer ind i dit array, men de er der. Du kan eventuelt bare rette kilden til den funktion, der laver dit array.
Gå til top
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.