SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

PHP 5.3 & MySQL 5.1

PHP 5.3 & MySQL 5.1 zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 27.04.2008, 12:21:07
Mortz Mortz ist offline
Anfänger
 
Registriert seit: Apr 2008
Beiträge: 3
nur ungleiche werte im array

Tach auch,

ich bin gerade dabei per Jpgraph ein paar Statistiken zu schreiben. Mein erstes Ziel ist, ein Diagramm für die Useraktivität zu erstellen.
Dafür musste ich aus meiner Datenbank das Datum der letzten Aktivität holen und in die richtige Form bringen, damit Jpgraph auch was damit anfangen kann.
Hier mal mein Code für diejenigen, die sowas machen wollen:
PHP-Code:

...
// Datenbank-abfrage-teil

$sql mysql_query("SELECT userid,active FROM users ORDER BY active ASC") or die(mysql_error());  // ich hol mir active aus der tabelle users und sortiere aufsteigend nach active

while ($row mysql_fetch_array($sql)) {            // geht jeden eintrag in active durch
                                                    //
    
$activearray[$row['userid']] = $row['active'];    // weist in jedem schleifen durchgang dem index "$row['userid']" den wert "$row['active]" zu
}                                                    // und erzeugt damit ein Array "$activearray" mit genausovielen indizes, wie user angemeldet 
                                                    // sind und weißt den indizies die jeweiligen letzten online aktivität zu

$anzahl array_count_values($activearray);            // zählt alle werte aus dem array "$arrayactive" ;
//foreach($anzahl as $Schluessel=>$Wert)            // 
//{                                                    // für jeden schlüssel mit dem wert aus dem array $anzahl
//    echo"<li>",                                    // 
//          $Schluessel,                                // wird der schlüssel
//         " (",                                        // 
//          $Wert,                                        // und der wert ausgegeben
//          ")</li>";                                    // 
//}                                                    //     


// Datenbank-abfrage-teil ist hier zuende


// ---------------Kuchendiagramm Anfang-------------//


// Some data
$data $activearray;

// Create the Pie Graph. 
$graph = new PieGraph(800,600,"auto");
$graph->SetShadow();

// Set A title for the plot
$graph->title->Set("User Aktivität");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

// Create
$p1 = new PiePlot($data);
$p1->value->show=true;
$p1->SetLegends($activearray);
$graph->Add($p1);
$graph->Stroke();



//------------Kuchendiagramm Ende-----------------//
... 


Nach diesem Erfolgserlebnis (endlich mal was funktionierendes in php geschrieben zu haben), muss ich jetzt nurnoch ein Problem bereinigen.
Und zwar hab ich mit $activearray zwar ein Array, indem das letzte Aktivitätsdatum drinsteht, aber sind dort leider auch Werte mit dem Gleichen Datum enthalten.
Sprich: Das Datum 2008-04-18 21:03:00 ist zweimal in der Bank enthalten und wird auch zweimal an JpGraph übergeben.
Damit ergibt sich der unschöne Sachverhalt, dass 2008-04-18 21:03:00 zweimal in der Legende enthalten ist und auch zweimal als Stück im eigentlichen Kuchendiagramm angezeigt wird.
Ich will aber jedes Datum nur einmal in der Legende haben und der Kuchen soll nur die Zahlen anzeigen, wievielmal das jeweilige Datum vorhanden ist (s.h.:array_count_values).
Wenn man den auskommentierten teil bei array_count_values mal wegmacht, dann wird sowas angezeigt:
# 2008-04-18 21:03:00 (2)
# 2008-04-27 11:14:05 (1)

Lange Rede kurzer Sinn. Hat jemand eine Lösung für mein Problem? :)

Mfg, Mortz
Mit Zitat antworten
  #2  
Alt 27.04.2008, 14:42:22
Opendix Opendix ist offline
Senior Member
 
Registriert seit: Oct 2004
Ort: Werdenberg / Schweiz
Alter: 36
Beiträge: 1.476
AW: nur ungleiche werte im array

hmm mir fällt da grad keine PHP-Funktion ein.. würde aber sowas in der Art vorschlagen:

PHP-Code:
//Dein assoziatives Array mit den Daten aus der Datenbank
$deinArrayMitDaten = array();
//Das neue Array mit den gefilterten Daten
$neuesArray = array();

//Jedes Element des Ursprung-Arrays durchgehen
for($i=0$i<count($deinArrayMitDaten); $i++)
{
    
//Prüfen ob im neuen Array bereits ein Element mit dem gesuchten Namen existiert
    
if(isset($neuesArray[$deinArrayMitDaten[$i])
    {
        
//Wenn ja dann einfach da den Zähler hochzählen
        //und dann zum nächsten Element des Ursprung-Elements gehen
        
$neuesArray[$deinArrayMitDaten[$i]]++;
        continue;
    }
    
//Sollte das Element im neuen Array noch nicht existieren dieses erstellen
    //kA ob diese Zeile überhaupt notwendig ist, evtl könnte man das 
    //obige IF-Statement auch weglassen, aber ich glaube das würde zu
    //zu einer PHP-Notice führen, also müsste das hier die elegantere Lösung sein :)
    
$neuesArray[$deinArrayMitDaten[$i]] = 1;

Nun müsstest du eigentlich in $neuesArray sowas haben:

Code:
['eintrag1'] => 1
['eintrag2'] => 1
['eintrag3'] => 4
['eintrag4'] => 2
usw.
__________________
Opendix lehnt jegliche Haftung für evtl. vorhandene Fehler in der Grammatik sowie der Satzstellung ab! Bitte wenden Sie sich an die Tastatur!

Betatester gesucht:
Skiclub Gams / CEVI Grabs
Mit Zitat antworten
  #3  
Alt 28.04.2008, 18:50:50
Mortz Mortz ist offline
Anfänger
 
Registriert seit: Apr 2008
Beiträge: 3
AW: nur ungleiche werte im array

Ahoi,

danke schonmal für die Antwort. Ich hab mich jetzt mal seit gestern damit beschäftigt, nur komm ich zu keinem richtigen Ergebniss. Wenn ich deinen Code benutze, wird mir nur ein Datum auf einem bestimmten Index angezeigt, aber ich brauch ja die Anzahl wieoft ebenjenes im Array vorkommt. Wenn ich mich nicht irre, dann gehen wir hierbei auch davon aus, dass die Daten im Array sortiert sind, aber ich glaub mit
PHP-Code:
$activearray[$row['userid']] = $row['active']; 
wird das wieder durcheinandergebracht. Wäre es nicht besser, wenn ich das nochmal irgendwie anders schreibe, dass auch wirklich nach Datum sortiert die Indizes von 1 aufwärts gehen? Kann man denn einfach in diese Whileschleife eine forschleife einsetzen?

Hier ist nochmal dein Code angepasst an meine Bedürfnisse:
PHP-Code:
$uniquearray array_unique($activearray);

//Dein assoziatives Array mit den Daten aus der Datenbank
$deinArrayMitDaten $activearray;
//Das neue Array mit den gefilterten Daten
$neuesArray $uniquearray;

//Jedes Element des Ursprung-Arrays durchgehen
for($i=0$i<count($deinArrayMitDaten); $i++)
{
    
//Prüfen ob im neuen Array bereits ein Element mit dem gesuchten Namen existiert
    
if(isset($neuesArray[$deinArrayMitDaten[$i]]))
    {
        
//Wenn ja dann einfach da den Zähler hochzählen
        //und dann zum nächsten Element des Ursprung-Elements gehen
        
$neuesArray[$deinArrayMitDaten[$i]]++;
        continue;
    }
    
//Sollte das Element im neuen Array noch nicht existieren dieses erstellen
    //kA ob diese Zeile überhaupt notwendig ist, evtl könnte man das 
    //obige IF-Statement auch weglassen, aber ich glaube das würde zu
    //zu einer PHP-Notice führen, also müsste das hier die elegantere Lösung sein :)
    
$neuesArray[$deinArrayMitDaten[$i]] = 1;

mit " $uniquearray = array_unique($activearray); " hab ich dann jedes Datum nur einmal, sprich aus " 2008-04-18 21:03:00 , 2008-04-18 21:03:00 , 2008-04-28 16:37:04 " ( die 3 Daten sind auch wirklich vorhanden)
wird einfach "2008-04-18 21:03:00 , 2008-04-28 16:37:04"

Wie gesagt weiß ich nicht genau, ob das Array, was ich oben erstellt hab, auch wirklich mit dem Zählcode Kompatibel ist.

Falls jemand eine andere Idee für mein Problem hat, nur raus damit :)

Mfg, Mortz
Mit Zitat antworten
  #4  
Alt 30.04.2008, 18:39:38
Mortz Mortz ist offline
Anfänger
 
Registriert seit: Apr 2008
Beiträge: 3
AW: nur ungleiche werte im array

Tach schön,

ich hab mich mit nem Kumpel nochmal zusammengesetzt und das Problem gelöst. Zumindest läuft es bisher, so wie ich es auch wollte :).

Den Code hab ich soweit frisiert, kann aber sein, dass man nochwas daran besser machen kann. Jedenfalls für diejenigen, die dasselbe oder auch ähnliches machen wollten, hier unser Code:

PHP-Code:
$sql "SELECT active FROM users ORDER BY active ASC";  // ich hol mir active aus der tabelle users und sortiere aufsteigend nach active

$result mysql_query($sql);

$anzahl_gesamt mysql_num_rows($result);

$neuesArray = array();

$k 1;
while (
$k <= $anzahl_gesamt) {
$aktueller_eintrag mysql_fetch_object($result);

if (
array_key_exists("$aktueller_eintrag->active",$neuesArray)) 
    { 
    
$neuesArray[$aktueller_eintrag->active]++; 
    }
    else
    {
    
$neuesArray[$aktueller_eintrag->active] = 1
    
    }
$k++;
}


$neuesArray1 = array();

$neuesArray1 array_values($neuesArray);

$uniquearray = array();

while (
current($neuesArray)) 
    {
        
array_push($uniquearraykey($neuesArray));
        
next($neuesArray);
    }



// ---------------Kuchendiagramm Anfang-------------//


// Some data
$data $neuesArray1;

// Create the Pie Graph. 
$graph = new PieGraph(800,600,"auto");
$graph->SetShadow();

// Set A title for the plot
$graph->title->Set("User Aktivität");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

// Create
$p1 = new PiePlot($data);
$p1->value->show=true;
$p1->SetLegends($uniquearray);
$graph->Add($p1);
$graph->Stroke();


//------------Kuchendiagramm Ende-----------------// 
hf, Mortz
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Doppelte einträge aus einem Mehrdimensionalen Array aussortieren und löschen PHoenix_KM PHP für Fortgeschrittene und Experten 2 17.04.2008 18:19:53
Array nach Wert durchsuchen, durchsuchte Werte an das Ende anfügen Michael P. PHP Grundlagen 6 01.03.2008 18:02:28
Doppelte Werte in Array in anderem Array addieren? Floatax PHP für Fortgeschrittene und Experten 5 25.08.2007 22:50:51
Array Werte vergleichen ghostface PHP Grundlagen 4 20.09.2006 09:02:16
Einzelne Daten aus Textdatei Auslesen azubinator PHP Grundlagen 153 17.12.2004 13:36:58


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:55:46 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt