OVH Cloud OVH Cloud

Tableau array

5 réponses
Avatar
Stephane
Bonjour,

Je suis entrain de développer une page pour afficher un profile routier avec les altitudes correspondantes. Ne me
dites-pas jpgraph, on n'a pas la maîtrise des axes Y et X. Pour arriver à mes fins, je doit définir pour chaque ligne le
point de départ (X0,Y0) et d'arrivée (X1,Y1) et c'est la que je bloque!

J'essaie en vain de trouver une solution pour ressortir des valeurs d'un tableaux array. J'ai passé toutes les fonctions
en revue, sans trouver vraiment trouver mon bonheur.
Voilà comme je procède:

$altitude=array("435"=>"0", "440"=>"1", "560"=>"5", "652"=>"8", "630"=>"2", "435"=>"3");

$AltitudeMin=min($altitude2);// défini le point le plus bas du graphique
$HauteurGraphe=400; // défini la hauteur du graphique
$distanceX0=0; // premier point en x est à zéro

?><table border="1" cellpadding="4" cellspacing="0" bordercolor="#000000" summary=""><?

foreach($altitude as $altitudeY1 => $distanceX1){

$altitudeY0=$HauteurGraphe-($altitudeY1-$AltitudeMin);
?><tr>
<td><?=$distanceX0?></td>
<td><?=$altitudeY0?></td>
<td><?=$distanceX1?></td>
<td><? echo $altitudeY1= $HauteurGraphe-($altitudeY1-$AltitudeMin);?></td>
</tr>
<?

$distanceX0=$distanceX0+($distanceX1+$distanceX0);

}// fin foreach($altitude as $alt => $distance)

?></table><?

Ce qui m'affiche:
0 400 3 400
3 395 1 395
7 275 5 275
19 183 8 183
46 205 2 205


Et ce que je cherche à afficher:

0 400 10 395
10 395 60 275
60 275 140 183
140 183 160 205
160 205 190 400

Faut-il repartir sur d'autres bases?

--
Stéphane
La souplesse d'esprit permet de s'adapter dans toutes circonstances.

5 réponses

Avatar
Jedi121
"Stephane" a écrit le 24/10/2003 :
$altitude=array("435"=>"0", "440"=>"1", "560"=>"5", "652"=>"8", "630"=>"2",
"435"=>"3");


Tu ne peux pas utiliser un tableau comme celui-ci pour stocker ces
valeurs.
En effet tu utilises les altitudes comme clef de ton tableau, ce qui
fait qu'à une altitude ne correspond qu'une et une seule valeur de
delta-x (car ce sont en fait des écarts tes valeurs si j'ai bien
compris).
Autrement dit dans ton tableau tu indiques ici que pour la clef "435"
la valeur vaut "0" dans le premier élément, mais dans le dernier tu
écrases cette info en indiquant "435"=>"3".
Du coup la valeur associée à la clef "435" est "3" et non plus "0".

Plusieurs solutions :
1. (Que je te préconise)
Tu inverses ton tableau et tu stockes directement le couple distance =>
altitude (et non altitude => delta_distance comme pour le moment) et
cela simplifie considérablement ton utilisation après.

2. Tu veux conserver ces données "delta-x" dans ce cas tu stockes un
tableau de tableau avec comme premier indice une valeur chiffrée
(numéro d'ordre). Ce qui donne :
$altitude = array( array(435, 0), array(440, 1), array(560,5),
array(630,2), array(435,3));
Mais la suite sera du coup plus compliquée.

Suivant l'origine de tes données brutes, tu choisiras ta solution, mais
je ne peux que te conseiller la première qui me semble bcp plus
naturelle!

Avatar
P'tit Marcel
Stephane écrivit:

$altitude=array("435"=>"0", "440"=>"1", "560"=>"5", "652"=>"8",
"630"=>"2", "435"=>"3");


il s'agit d'entiers et non de chaînes donc :
$altitude=array(435=>0, 440=>1, 560=>5, 652=>8, 630=>2, 435=>3);


$AltitudeMin=min($altitude2);


$altitude et non $altitude2


<td><? echo $altitudeY1= $HauteurGraphe-($altitudeY1-$AltitudeMin);?>


Beurk :-(

<?php
$altitudeY1 = $HauteurGraphe-($altitudeY1-$AltitudeMin);
echo $altitudeY1;
?>


Faut-il repartir sur d'autres bases?


error_reporting(E_ALL);
en début de script est ton ami.


--
P'tit Marcel
statistiques sur les forums modérés : http://www.centrale-lyon.org/ng/

Avatar
Stephane
Bonjour,

Merci à Jedi121 et au P'tit Marcel.

Suite à vos conseils, j'ai modifié et simplifié le cas.

$altitude=array(0=>435, 1=>440, 5=>560, 8=>652, 2=>630, 2=>435);

$AltitudeMin=min(array_values($altitude));// défini le point le plus bas du graphique
$; // défini la hauteur du graphique
$distanceX0=0; // premier point en x est à zéro


foreach($altitude as distanceX0 => $altitudeY0){

// Le premier passage de la boucle devrait être comme ça : 0 435 1
440
// Le seconde passage de la boucle devrait être comme ça : 1 440 5
560

imageline ($im, $distanceX0, $altitudeY0, $distanceX1, $altitudeY1, $ligne_col);


}// fin foreach($altitude as $alt => $distance)

Pour l'instant je souhaite comprendre comment passer les valeurs dans imageline,
dans un deuxième temps , je ferais les calculs (en principe * 10 la distance et prendre
$AltitudeMin comme point zéro et calculer toutes les altitudes en fonction de cette
variable).

J'espère que je suis plus clair ?

--
Message monitoré par axinews : http://www.axinews.com/
Avatar
Jedi121
"Stephane" a écrit le 24/10/2003 :
Suite à vos conseils, j'ai modifié et simplifié le cas.

$altitude=array(0=>435, 1=>440, 5=>560, 8=>652, 2=>630, 2=>435);


Oui mais tu n'as toujours pas compris l'histoire des clefs/valeurs :
quand tu définis ton tableau 2=>630, 2=>435
quelle valeur va être associée à 2? 630 ou 435? Ce sera la dernière qui
a parlé donc tu va perdre tous les points 2=> précédents.

Relis bien les posts!

Avatar
Stephane
"Jedi121" a écrit

"Stephane" a écrit le 24/10/2003 :
Suite à vos conseils, j'ai modifié et simplifié le cas.

$altitude=array(0=>435, 1=>440, 5=>560, 8=>652, 2=>630, 2=>435);


Oui mais tu n'as toujours pas compris l'histoire des clefs/valeurs :
quand tu définis ton tableau 2=>630, 2=>435
quelle valeur va être associée à 2? 630 ou 435? Ce sera la dernière qui
a parlé donc tu va perdre tous les points 2=> précédents.

Relis bien les posts!


Merci encore.
Voilà comme j'ai procédé
J'ai partager mon array en 2
$distance=array(0, 1.1, 1.2, 0.7, 1.2, 1.6, 1.8, 1.2);
$altitude=array(430,482, 571, 615, 750, 848, 1008, 1082);
Puis, j'ai completement modifié la boucle:


//boucle pour extraire les valeurs $distance=array et $altitude=array
for ($i=0; $i<count($altitude)-1; $i++){
$distance=array_values($distance);// extrait la valeur
$altitude=array_values($altitude);// extrait la valeur

$distance0=($distance[$i]*$RapportDistanceAltitude); // point X0
$altitude0=$altitude[$i; // point Y0
$distance1=($distance[$i+1]*$RapportDistanceAltitude); // point X1
$altitude1=$altitude[$i+1; // point Y1

$distance0=$distance0+$Distance0Prev; // additionne les distances index 0
$distance1=$distance1+$Distance1Prev; // additionne les distances index 1
$altitude0=($HauteurGraph)-($altitude0-$AltitudeMin); // calcul les altitudes par rapport à $AltitudeMin
$altitude1=($HauteurGraph)-($altitude1-$AltitudeMin);// calcul les altitudes par rapport à $AltitudeMin

imagesetthickness ( $im,4);
imageline($im, $distance0,$altitude0,$distance1,$altitude1,$red);

$Distance0Prev=$distance0;// affecte la variable $distance0 à $Distance0Prev
$Distance1Prev=$distance1;// affecte la variable $distance1 à $Distance1Prev
}




--
Stéphane
La souplesse d'esprit permet de s'adapter dans toutes circonstances.

http://www.velo-passion.com pour les fans de vélo
http://www.lorimier.com/chemin-des-cretes-du-jura une ballade à pied d'une semaine à 2
http://www.lapassade.ch pour les fans de théâtre