Na moje potrzeby stworzyłem funkcję generującą diagram z zakończeniami. Ze względu iż może się ona komuś przydać umieszczam ją tutaj.
Jest ona dość prosta. Ma także możliwości regulacyjne. Możemy ustalić ilu pixelom ma odpowiadać 1%, ustalić wysokość diagramu oraz szerokość jego zakończeń.
W przypadku, gdy liczba będzie wynosić mniej niż 1 lub więcej niż 100, to diagram nie zostanie wygenerowany. Gdy liczba nie będzie przekraczać sumy szerokości jego zakończeń, to zostanie wygenerowany diagram o szerokości równej sumie obu zakończeniom diagramu.

Proszę o sugestie, jak można ją uprościć oraz ewentualne błędy.

Funkcja:
[php:1:cd797dcd10]<?php
$w_p = 2; // ilosc pikseli odpowiadajacej jednemu procentowi
$wys_c = 12; // wysokosc diagramu
$szer_z = 4; // szerokosc zakonczen diagramu

$p_l = './p_l.gif'; // plik lewego zakończenia
$p_s = './p_s.gif'; // plik srodka diagramu
$p_p = './p_p.gif'; // plik prawego zakończenia

function diagram($i_p) {
global $w_p, $wys_c, $szer_z, $p_l, $p_s, $p_p;

if (!is_numeric($i_p) || !is_numeric($w_p) || !is_numeric($wys_c) || !is_numeric($szer_z) || !file_exists($p_l) || !file_exists($p_s) || !file_exists($p_p)) return 0;

$a = array('<img border="0" src="', '" width="', '" height="', '">');
$il = $i_p * $w_p;
$ob = 2 * $szer_z;

if ($il > $ob && $i_p <= 100 && $i_p > 0) {
return $a[0].$p_l.$a[1].$szer_z.$a[2].$wys_c.$a[3].
$a[0].$p_s.$a[1].($il - $ob).$a[2].$wys_c.$a[3].
$a[0].$p_p.$a[1].$szer_z.$a[2].$wys_c.$a[3];
} elseif ($il <= $ob && $il > 0 && $i_p > 0) {
return $a[0].$p_l.$a[1].$szer_z.$a[2].$wys_c.$a[3].
$a[0].$p_p.$a[1].$szer_z.$a[2].$wys_c.$a[3];
} else {
return 0;
}
}
?>[/php:1:cd797dcd10]

Przykład uruchomienia:
[php:1:cd797dcd10]<?php
if ($diag = diagram(69)) {
echo 'Diagram 69%: '.$diag;
} else {
echo 'Wystąpił błąd.';
}
?>[/php:1:cd797dcd10]