Grafika publishing webtip.cz grafika.cz mujiPod.cz mujmac.cz fotografovani.cz printing.cz builder.cz galerie
webtip.cz
adresář  | práce  | diskuse  | redakce  | inzerce
 
 


  Grafy v PHP ... část 2.
o autorovi 
poslat mailem 
tisknout článek 
aktuální rubrika 
PHP je jedním z nejrozšířenějších internetových programovacích jazyků, ale jeho přednosti vynikají i v jiných oblastech.

Čevelíček Marek - 17.02.2003 - clanek - Rubrika: PHP
Předchozí díl: Grafy v PHP ... část 1.
Seriál:

V tomto dílu navážu na předchozí článek, na jehož konci jsem vám předvedl funkční verzi skriptu na generaci grafů ze zadaných hodnot. Dnes skript obohatím o jednu užitečnou funkci - načítání dat z externího souboru. Toto přijde vhod především těm z vás, kteří budete mít údaje uloženy v souborech Excelu. Jak to bude fungovat? Soubory .XLS jsou pro naše účely nepoužitelné. Excel má ale tu výhodu, že dokáže z uložených dat v .XLS souborech vytvořit .CSV soubory. To jsou vlastně data ve formě prostého textu, oddělená štředníky. Struktura se zachovává - každý řádek v .CSV souboru představuje jeden řádek dat v .XLS souboru.

Vytvořil jsem tedy skript, jenž dokáže .CSV soubory přečíst a separovat požadované hodnoty. Tyto hodnoty budou poté uloženy do proměnných $cisla a $ox a použity jako datový zdroj pro vám již známý generátor grafů. K tomu, aby skript pracoval dobře, musejí mít excelové tabulky určitou strukturu, kterou vám ukážu na obrázku 1:

Skript bude rozdělen na 2 části a k jeho běhu bude nutné definovat několik proměnných. První proměnná bude $sfile - zde zadáte umístění .csv souboru s daty. Druhá proměnná bude $way, která dělí skript na ony dvě části. Může mít hodnotu "s" nebo "r". Podle toho, chcete-li vybírat z tabulky sloupce nebo řádky. Třetí proměnná je $rad_slo a uložíte do ní číslo řádku nebo sloupce, který má sloužit jako datový zdroj. Nyní vám vysvětlím, jak to s tím výběrem vlastně je. Zvolíte-li si výběr sloupce, bude skript načítat data zobrazená na obrázku 2:

Podle předchozího obrázku načte skript data, pokud má proměnná $way hodnotu "s" a proměnná $rad_slo hodnotu 2. Výstupem skriptu bude pak proměnná $ox, v níž budou uloženy hodnoty označeny zeleně, proměnná $cisla s červěně označenými hodnotami, dále pak proměnná $sosax (fialová hodnota) a $sosay (žlutá hodnota). Proměnné $sosay a $sosax můžete použít pro generování titulků os Y a X. Budete-li chtít srovnat data v jednom řádku, musí mít $way hodnotu "r". Pokud bude mít $rad_slo hodnotu 3, bude skript načítat data podle posledního obrázku:

Hodnoty proměnných a barvy přitom odpovídají předchozímu obrázku. Chybí zde pouze proměnná $sosay. Uvádět "Kraj" jako titulek osy Y je totiž zbytečné a při této struktuře tabulky bude obsah levého horního políčka vždy nepodstatný.

Nyní tedy ke skriptu. Ten vypadá takto:

<?
01 if ($way == "s"):
02 $ssloupec = $rad_slo;
03 $sfile_all = File ($sfile);
04 $sradku = Count($sfile_all);
05 $scheck_sloupec = Count(Explode(";", $sfile_all[0]));
06 if (($ssloupec == 1) || ($ssloupec >= $scheck_sloupec)):
07 liq_error("\$rad_slo is not valid data source. Change the value to greather than 1 and lesser than number of columns in database.");
08 endif;
09 $cisla = array();
10 $ox = array();
11 for ($i=0; $i < $sradku; $i++):
12 $slinka = $sfile_all[$i];
13 $sdata = Explode(";", $slinka);
14 if ($i == 0):
15 $sosax = $sdata[0];
16 $sosay = $sdata[$ssloupec];
17 else:
18 $sox = $sdata[0];
19 array_push($ox, $sox);
20 array_push($cisla, Round($sdata[$ssloupec]));
21 endif;
22 endfor;
23 else:
$rradek = $rad_slo;
$rfile_all = File ($sfile);
$rradku = Count($rfile_all);
if (($rradek == 1) || ($rradek >$rradku)):
liq_error("\$rad_slo is not valid data source. Change the value to greather than 1 and lesser than number of lines in database.");
endif;
$cisla = array();
$ox = array();
$rlinka = $rfile_all[$rradek-1];
$rdata = Explode(";", $rlinka);
$sosax = $rdata[0];
$sosay = "";
$rox = Explode(";", $rfile_all[0]);
for ($i=0; $i<Count($rdata)-1; $i++):
$sox = trim($rox[$i+1]);
array_push($ox, $sox);
array_push($cisla, Round($rdata[$i+1]));
endfor;
endif;
?>

Řádky jsem si očísloval a teď vám je postupně vysvětlím.
01 - hlavní podmínka, která dělí skript na dvě části - načítání sloupců a řádků
02 - do proměnné uložíme číslo sloupce k načtení
03 - do pole načteme obsah souboru. 1 prvek = 1 řádek
04 - zjistíme, kolik má soubor řádků a tedy kolik prvků má pole
05 - zjistíme, kolik má soubor sloupců
06-08 - pokud sloupec k načtení má číslo 1 a je tedy zároveň osou X, nebo pokud číslo sloupce k načtení je větší, než počet sloupců, vypíšeme chybu
09, 10 - definujeme proměnné, do nichž se uloží data
11-22 - každý řádek ze souboru načteme, rozdělíme a požadovaná data uložíme do proměnných
14-16 - prochází-li skript první řádek, v němž jsou jen data pro osu X a Y, uložíme tyto do proměnných $sosax a $sosay
17-21 - všechno další uložíme do polí $ox a $cisla

Druhá část skriptu funguje v podstatě stejně, jen načítá místo sloupců řádky. Tímto způsobem dostaneme aplikaci, která nám usnadní práci. Nemusíme totiž přepisovat data z databází do proměnných $ox a $cisla, nýbrž skript to udělá za nás. Hotová aplikace je ke stažení ZDE.

Čevelíček Marek


Hodnocení článku: -1- -2- -3- -4- -5-  Aktuální hodnocení: 2.69 (2440)

Relevantní články
Žádné články


Diskuzní fórum
Jirka05.12.16:51prima, ale
Marek06.12.13:39 LRE: prima, ale

 

  O vydavateli | Kontakt | Ceník reklamy | Ochrana osobních dat
©2002 Grafika Publishing. Všechna práva vyhrazena!