2010-05-11 5 views
8

Je construis un graphique linéaire en PHP. Je définissais la valeur maximale du graphique linéaire à la valeur maximale de ma collection d'éléments, mais cela a fini par rendre le graphique moins lisible que vous ne pouvez pas afficher la ligne la plus haute du graphique lorsqu'elle croise le sommet de celle-ci. Donc, ce que je dois est fondamentalement une formule pour prendre un ensemble de nombres et de calculer ce que la valeur maximale logique sur le graphique de la ligne devrait être .. donc quelques exemplesPHP étant donné une série de nombres arbitraires, comment puis-je choisir une valeur max logique sur un graphique linéaire?

3500 
250 
10049 
45394 
434 
312 
     Max value on line graph should probably be 50000 

493 
412 
194 
783 
457 
344 
    max value on line graph would ideally be 1000 

545 
649 
6854 
5485 
11545 
     In this case, 12000 makes sense as max value 

donc quelque chose d'aussi simple que l'arrondi vers le haut le plus proche Le millième pourrait fonctionner mais j'en aurais besoin pour augmenter progressivement au fur et à mesure que les chiffres grossiraient. (50000 au lieu de 46 000 dans le premier exemple) Le maximum que ces chiffres atteindront est d'environ un million.

Toutes les recommandations seraient grandement appréciées, merci.

Voici ce que je me suis installé sur, merci à vous tous pour vos commentaires:

private function FigureMaxValue($array) 
    { 
     $highestNumber = max($array); 
     if ($highestNumber == 0) return 0; 
     $highestNumber = $highestNumber * 1.1; 
     (float)$highestNumber = round((float)$highestNumber, 0); 
     $maxValue = ceil((integer)$highestNumber/100) * 100; 
     return $maxValue; 
    } 
+0

Quelle devrait être la valeur maximale si vous aviez un 50001 au lieu de 45 394 dans le premier exemple? – IVlad

+0

Quelle version de PHP? – erisco

+0

@IVlad: Je dirais 53,000ish? (chose principale est un nombre entier facilement divisible comme 53000 pas 53500 ou 53585) @erisco: PHP 5 – stormist

Répondre

1

Je voudrais juste faire une magnitude supérieure à la valeur la plus élevée, comme $highestValue * 1.05 ou quelque chose. Vous serez toujours confronté à la question des valeurs aberrantes IE -

4 
5 
12 
2 
1 
4 
4266 

Dans ce cas, vous perdriez la résolution sur les numéros inférieurs. Vous pouvez tester l'écart-type sur chaque élément si vous souhaitez supprimer les valeurs aberrantes.

2
1. $numbers = array(3500, 250, 10049, 45394, 434, 312) 
2. $highestNumber = max($numbers) 
3. $n = 10^(strlen($highestNumber) - 1) 
4. $highestNumber = $highestNumber/$n 
5. $newMax = ceil($n) 
6. $newMax = $newMax * $n 
+0

Je reçois "mauvais paramètre pour rond" – stormist

+0

les paramètres PHP_ROUND_HALF_UP ont été introduits dans PHP 5.3.0. Quelle version de PHP utilisez-vous? –

+0

Utilisez ceil() à la place, j'ai édité ma réponse ci-dessus; –

Questions connexes