PHP Tutorials, PHP lernen, PHP Forum, PHP Community and more ... MyWebsolution.de!

Sidebar

Home News Tutorials Workshops Tipps Artikel Gästebuch Sitemap Unicode Shopping

Suche

Members

Forum Login Registrierung

Statistik

Statistikbereich
Jetzt3
Heute188
Gestern271
Gesamt1663745

PHP Diagrammklasse

Autor Flitze
Klicks 29519
Rating für PHP Diagrammklasse
  5.8 von 10
Bewertungen10
Stand 03.08.2010
Keywords:
PHP Diagrammklasse, PHP Klasse für Diagramme, Diagramm mit PHP erstellen, PHP Diagramme erzeugen, Diagramme mit HTML herstellen, PHP Diagramme ohne Grafikfunktionen

Amazon: PHP 5.3 und MySQL 5.1
Breadcrumb:
Tipps » PHP Diagrammklasse
Seite : 1 Bewerten
Article Wizard - deutscher Article SpinnerDiese Tipp befasst dich mit der Erstellung von Diagrammen in PHP. PHP Diagramme bzw. Diagramme allgemein dienen in der Regel einer graphischen Auswertung statistischer Daten. Das können z.B. Benutzerzahlen, Downloads, Umsätze, etc.. sein. Das hier beschriebene Diagramm ist ein sog. Balkendiagramm, d.h. dass es die Werte in Form von vertikalen Balken darstellt. Ein Balken symbolisiert bei diesem PHP Diagramm einen bestimmten Wert und durch die Relation der Balken zueinander lässt sich eine Tendenz der Daten ableiten. Jeder Balken benötigt dabei 2 Angaben, einen X-Wert, der den Balken "beschreibt" und einen Y-Wert, der für die Höhe verantwortlich ist. Außerdem macht es Sinn, dem Diagramm einen Namen zu geben und seine Ausmaße (Höhe und Breite) zu definieren.

Zur praktischen Umsetzung in PHP wird eine PHP Diagrammklasse zur Darstellung PHP Diagramm vorgestellt. Diese PHP Diagramme werden allerdings nicht mit PHP Grafikfunktionen sondern mit HTML erzeugt.

Attribute der Diagrammklasse


Aus den obigen Überlegungen lassen sich die benötigten Attribute der Klasse extrahieren:

Name
Hoehe
Breite
maximale Höhe des höchsten Balkens
X-Werte des Diagramms
Y-Werte des Diagramms


Als Quellcode sieht das so aus:

PHP:
<?php
    
class Diagramm {
        var 
$name// String or numeric
        
var $height// Int
        
var $width// Int
        
var $maxvalue_height// Int
        
var $x = array(); // Elements can be numeric or a string
        
var $y = array(); // Elements are numeric
    
}
?>


Methoden


Dazu kommen noch die Methoden zum befüllen (set) und auslesen (get) der Attribute:

PHP:
<?php
    
class Diagramm {
        
/* Attribute definieren
         * ...
        */

        // Diagrammname setzen
        
function setName($name){
            if(!
is_string($name) AND !is_numeric($name)){
                throw new 
Exception("Falscher Dateityp (".gettype($name).") number or string expected!");
                return 
false;
            }
            
$this->name $name;
        }

        
// Diagrammname auslesen
        
function getName(){
            return 
$this->name;
        }

        
// Höhe des Diagramms setzen
        
function setHeight($height){
            if(!
is_int($height)){
                throw new 
Exception("Falscher Dateityp (".gettype($height).") integer expected!");
                return 
false;
            }
            
$this->height $height;
            return 
true;
        }

        
// Höhe des Diagramms auslesen
        
function getHeight(){
            return 
$this->height;
        }

        
// Breite des Diagramms setzen
        
function setWidth($width){
            if(!
is_int($width)){
                throw new 
Exception("Falscher Dateityp (".gettype($width).") integer expected!");
                return 
false;
            }
            
$this->width $width;
            return 
true;
        }

        
// Breite des Diagramms auslesen
        
function getWidth(){
            return 
$this->width;
        }

        
// Balkenhöhe des Maximalwertes setzen
        
function setMaxvalueHeight($maxvalue_height){
            if(!
is_int($maxvalue_height)){
                throw new 
Exception("Falscher Dateityp (".gettype($maxvalue_height).") integer expected!");
                return 
false;
            }
            
$this->maxvalue_height $maxvalue_height;
            return 
true;
        }

        
// Balkenhöhe des Maximalwertes auslesen
        
function getMaxvalueHeight(){
            return 
$this->maxvalue_height;
        }

        
// Fügt einen X-Wert hinzu
        
function addX($x){
            if(!
is_numeric($x) AND !is_string($x)){
                throw new 
Exception("Falscher Dateityp (".gettype($x).") number or string expected!");
                return 
false;
            }
            
$this->x[] = $x;
            return 
true;
        }

        
// Fügt einen Y-Wert hinzu
        
function addY($y){
            if(!
is_numeric($y)){
                throw new 
Exception("Falscher Dateityp (".gettype($y).") number expected!");
                return 
false;
            }
            
$this->y[] = $y;
            return 
true;
        }
    }
?>


Dabei wird jeder Dateityp bei der Eingabe überprüft und bei falschen Werten ein Fehler ausgeworfen, den wir später beim Instanzieren eines Objektes der Klasse mittel eines try{}...catch{}-Statements abfangen können.

Ausgabe des Diagramms


Jetzt geht es aber erstmal mit dem interessanten Teil des Diagramms weiter, der Ausgabe. Dabei beziehe ich mich auf den Quellcode zur Diagrammerstellung ohne Grafikfunktionen aus meinem Benutzerstatistik Tutorial. Sollten Unklarheiten auftauchen, lohnt sich ein Blick in das o.g. Tutorial ;)

Hier der Code:

PHP:
<?php
    
class Diagramm {
        
/* Attribute definieren
         * und set / get Methoden definieren
         * ...
        */

        
function _checkValues(){
            if(!isset(
$this->name)){
                throw new 
Exception("Kein Diagrammname vorhanden!");
                return 
false;
            }
            if(!isset(
$this->height)){
                throw new 
Exception("Keine Höhe für das Diagramm vorhanden!");
                return 
false;
            }
            if(!isset(
$this->width)){
                throw new 
Exception("Keine Breite für das Diagramm vorhanden!");
                return 
false;
            }
            if(!isset(
$this->maxvalue_height)){
                throw new 
Exception("Keine Höhe für den Maximalwert vorhanden!");
                return 
false;
            }
            if(!isset(
$this->x)){
                throw new 
Exception("Keine X-Werte vorhanden!");
                return 
false;
            }
            if(!isset(
$this->y)){
                throw new 
Exception("Keine Y-Werte vorhanden!");
                return 
false;
            }
            if(
count($this->x)!=count($this->y)){
                throw new 
Exception("Anzahl der X- und Y-Werte stimmt nicht überein!");
                return 
false;
            }
            return 
true;
        }

        function 
_getRelation(){
            
$relation = array();
            foreach(
$this->as $key => $wert)
                
$relation[$key] = $wert/$this->_getMaxValue();
            return 
$relation;
        }

        function 
_getMaxValue(){
            return 
max($this->y);
        }

        function 
_getDataNumber(){
            return 
count($this->y);
        }

        function 
display($echo false){
            if(!
$this->_checkValues())
                return 
'';
            
$output '';

            
// Verhältnis aller Daten zum Maximalwert berechnen
            // Jeder Wert erhält dann als Höhe einen Bruchteil der
            // maximalen Balkenhöhe
            
$relation $this->_getRelation();

            
// Tabelle erzeugen
            
$output .= "<table cellpadding=\"1\" style=\"width:".$this->getWidth()."px; height:".$this->getHeight()."px; text-align:center; background-color:#aaa; border:solid 1px black; font-size:10px; margin:10px auto\">\n";
            
// Diagrammname ausgeben
            
$output .= " <tr>\n".
                       
"  <td colspan=\"".$this->_getDataNumber()."\" style=\"height:20px;\">\n".
                       
$this->getName()."\n".
                       
"  </td>\n".
                       
" </tr>\n";

            
$output .= " <tr>\n";
            
// Werte - also Balken - ausgeben
            
foreach($relation as $key => $wert){
                 
// Breite einer Zelle und Höhe eines Balkens berechnen
                 
$output .= "  <td style=\"vertical-align:bottom; height:200px; width:".floor($this->getWidth()/$this->_getDataNumber())."px;\">".
                            
"   <div style=\"margin:auto; background-color:red; height:".floor($this->getMaxvalueHeight()*$wert)."px; width:".floor(($this->getWidth()/2)/$this->_getDataNumber())."px\" title=\"".$this->y[$key]."\">".
                            
"&nbsp;".
                            
"   </div>".
                            
"  </td>\n";
            }
            
$output .= " </tr>\n";

            
$output .= " <tr>\n";
            
// Stellen - also Balkenzuordnung - ausgeben
            
foreach($this->as $stelle){
                 
$output .= "  <td style=\"vertical-align:middle; border:solid 1px black; border-width:1px 1px 0px 1px; height:80px;\">";
                 
$output .= $stelle;
                 
$output .= "  </td>\n";
            }

            
$output .= " </tr>\n";
            
$output .= "</table>\n";
            if(
$echo)
                echo 
$output;
            else
                return 
$output;
        }
    }
?>


Mit der _checkValues-Methode prüfe ich, ob alle Konfigurationswerte, die ich zur Erzeugung des PHP Diagramms benötige, gesetzt wurden. Fällt diese Prüfung positiv aus, definiere ich die Variable $output, in der der Quellcode des Diagramms gespeichert wird. Dann beginne ich mit der Auswertung der Daten. Dazu verwende ich die Methode _getRelation, die den Maximalwert der Y-Werte mit der Methode getMaxValue ermittelt und dann alle anderen Werte ins Verhältnis dazu setzt. Dadurch kommt die Abstufung der Balken zu Stande. Unter jedem Balken wird der jeweilige X-Wert ausgegeben, so dass jeder Balken eindeutig zugeordnet werden kann. Der optionale Parameter $echo steuert bei der display-Methode, ob das Diagramm direkt ausgegeben oder als Ergebnis der Funktion zurückgegeben wird.

Beispielaufruf eines Diagramms



Ohne große Worte folgt nun noch der beispielhafte Aufruf eines PHP Diagramms erzeugt mittels unserer PHP Diagrammklasse:

PHP:
<?php
  
// Neues Objekt erzeugen
  
$a = new Diagramm();
  
// 'Versuche', die Konfiguration zu durchzuführen
  
try{
      
// Name setzen
      
$a->setName("Besucherzahlen");
      
// Höhe setzen
      
$a->setHeight(300);
      
// Breite setzen
      
$a->setWidth(580);
      
// Balkenhöhe setzen
      
$a->setMaxvalueHeight(190);
      
// X- und Y-Werte definieren
      
$x = array('Januar''Februar''März''April''Mai''Juni');
      
$y = array(    5500,     6800,    5200,    4800,  7000,   5900);
      
// Werte im Diagrammobjekt speichern
      
foreach($x as $key => $value){
          
$a->addX($value);
          
$a->addY($y[$key]);
      }
      
// Diagramm ausgeben
      
$a->display(true);
  }
  
// Geworfene Exceptions auswerten
  
catch(Exception $e){ 
      echo 
'<strong>Fehler: </strong>'.$e->getMessage();
  }
?>


  Bewerten

»» Zurück zum Menu

Suchmaschinenoptimierung

Suchmaschinenoptimierung (SEO - Search Engine Optimization)

Ranking

Tutorials (13)

8.6
8.4
8.1

Workshops (3)

8.8
8.7
7.6

Tipps (13)

7.2
6.7
6.5

Artikel (30)

8.4
7.2
6.6

RSS Feeds

Full Feed Tutorials Workshops Tipps Artikel

Twitter

Follow me on Twitter

Partner & Links


Valid HTML 4.01 Transitional
Valid CSS
nach oben

Diese Seiten unterstützen MyWebsolution:
 
© MyWebsolution.de
2006-2017