2010-05-11 13 views
8

Buduję wykres liniowy w PHP. Ustawiłem maksymalną wartość wykresu liniowego na maksymalną wartość mojej kolekcji przedmiotów, ale to spowodowało, że wykres stał się mniej czytelny, nie można wyświetlić najwyższej linii na wykresie, ponieważ przecina się ona z górą. Więc co muszę to po prostu wzór do podjęcia zestaw liczb i obliczyć, co logiczne max wartość na wykresie linia powinna być .. więc kilka przykładówPHP podane szereg arbitralnych liczb, w jaki sposób mogę wybrać logiczną wartość maksymalną na wykresie liniowym?

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 

więc coś tak prostego jak zaokrąglenie w górę do najbliższego tysięczny może zadziałać, ale potrzebowałbym go, by stopniowo wzrastał wraz ze wzrostem liczby. (50000 zamiast 46 000 w pierwszym przykładzie) Maksymalna liczba tych liczb wynosi około miliona.

Wszelkie zalecenia byłyby bardzo doceniane, dziękuję.

Oto co rozliczone, dziękuję wszystkim za komentarze:

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

Jaka powinna być maksymalna wartość, jeśli w pierwszym przykładzie miałeś 50001 zamiast 45 394? – IVlad

+0

Która wersja PHP? – erisco

+0

@ivlad: Powiedziałbym, że jest 53 000? (główna rzecz to łatwo podzielna liczba całkowita, jak 53000, nie 53500 lub 53585) @erisco: PHP 5 – stormist

Odpowiedz

1

Chciałbym po prostu zrobić wielkości powyżej najwyższej wartości, jak $highestValue * 1.05 czy coś. Nadal będziesz mieć do czynienia z problemem wartości odstających IE -

4 
5 
12 
2 
1 
4 
4266 

W takim przypadku utracisz rozdzielczość na niższe liczby. Możesz testować odchylenie standardowe dla każdego elementu, jeśli chcesz odrzucić jakiekolwiek wartości odstające.

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

Otrzymuję "zły parametr dla rundy" – stormist

+0

Parametry PHP_ROUND_HALF_UP wprowadzono w PHP 5.3.0. Którą wersję PHP używasz? –

+0

Zamiast tego użyj ceil(), zredagowałem powyższą odpowiedź; –

Powiązane problemy