mboost-dp1

Reverse array


Gå til bund
Gravatar #1 - Ronson ⅍
26. okt. 2005 10:52
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
Gravatar #2 - mrmorris
26. okt. 2005 14:21
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--)
...
Gravatar #3 - Ronson ⅍
26. okt. 2005 15:23
Fordi det ville være for nemt :)

Jeg forstår virkelig ikke hvorfor den tilsyneladende ikke tæller den rigtige vej, når nu arrayet ER vendt om

(der kan i øvrigt ikke følges med på linket efter 15:30 hver dag, det er ca. på det tidspunkt jeg smutter derfra)
Gravatar #4 - Blinklys
26. okt. 2005 16:12
Du har husket at smide resultatet af array_reverse() ind i $points-variablen ikk?

$points = array_reverse($points)

ikke kun

array_reverse($points)

Den fejl har jeg nemlig selv lavet, at tro at det array man giver som parameter bliver ændret, men det gør det ikke :)
Gravatar #5 - Ronson ⅍
26. okt. 2005 16:31
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.
Gravatar #6 - Acro
26. okt. 2005 18:22
#1 Ronson:
Dit array har vel intet med billedet af gøre? Dit primære index benytter du jo kun til at finde din to værdier (x og y) i dit sub-array. x og y værdierne ligger altid de samme steder på billedet, uagtet hvordan du vælger at sortere dit array.
Gravatar #7 - Ronson ⅍
27. okt. 2005 06:20
#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)
Gravatar #8 - Ronson ⅍
27. okt. 2005 11:05
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
Gravatar #9 - Acro
27. okt. 2005 14:47
#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.
Gravatar #10 - Ronson ⅍
27. okt. 2005 15:24
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å.
Gravatar #11 - Acro
27. okt. 2005 15:42
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.
Gravatar #12 - Acro
27. okt. 2005 15:45
Du kan også basere din x-værdi på din variabel $i som alternativ til at hente x-værdien fra $points[...][0].
Gravatar #13 - Ronson ⅍
27. okt. 2005 18:04
Hm jeg tror jeg forstår dig nu, tror fuldstændig jeg har overset at alle koordinaterne allerede står i arrayet og hænger sammen
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.

Opret Bruger Login