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 ::

Handbuch der Java-Programmierung

Handbuch der Java-Programmierung 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 08.11.2012, 16:47:15
Tikiwiki Tikiwiki ist offline
Anfänger
 
Registriert seit: Apr 2005
Beiträge: 115
vergleichen und bei Bedarf Array erweitern

Hallo zusammen,

ich stehe wieder für mich unlösbaren Problem wobei ich Eure geschätzte Hilfe benötige.

Ich habe 2 Arrays (s. unten) die ich miteinander vergleichen möchte. Das 1. Array beinhaltet alle verfügbaren Sensoren die im 2. Array vorkommen sollten (im Bestfall).
Wenn z. B. im 2. Array der Sensor "S01-01" fehlt, soll das 2. Array um diesen fehlenden Sensor erweitert werden. Das erweitere Element muss das gleiche Datum wie die anderen haben.

Vielleicht habt Ihr für mich einen Lösungsweg wie ich diese beiden Arrays durchlaufen könnte und zum gewünschten Ergebnis komme. Eine Struktur wäre für mich schon ausreichend.

Aufbau 1. Array:
PHP-Code:
Array
(
    [
1] => Array
        (
            [
sensorid] => 1
            
[suchstring] => AI-00
        
)

    [
2] => Array
        (
            [
sensorid] => 2
            
[suchstring] => AI-01
        
)

    [
3] => Array
        (
            [
sensorid] => 5
            
[suchstring] => AI-02
        
)

    [
4] => Array
        (
            [
sensorid] => 6
            
[suchstring] => AI-03
        
)

    [
5] => Array
        (
            [
sensorid] => 12
            
[suchstring] => RSSI
        
)

    [
6] => Array
        (
            [
sensorid] => 9
            
[suchstring] => S01-00
        
)

    [
7] => Array
        (
            [
sensorid] => 10
            
[suchstring] => S01-01
        
)

    [
8] => Array
        (
            [
sensorid] => 11
            
[suchstring] => S01-02
        
)

    [
9] => Array
        (
            [
sensorid] => 13
            
[suchstring] => S01-03
        
)

2. Array
PHP-Code:
Array
(
    [
0] => Array
        (
            [
0] => 00:03:44 2012/10/21
            
[1] => AI-00
            
[2] => Double
            
[3] => 4-20mA
            
[4] => 0
            
[5] => 00
            
[6] => 7.385

        
)

    [
1] => Array
        (
            [
0] => 00:03:44 2012/10/21
            
[1] => AI-01
            
[2] => Double
            
[3] => 4-20mA
            
[4] => 0
            
[5] => 01
            
[6] => 8.082

        
)

    [
2] => Array
        (
            [
0] => 00:03:44 2012/10/21
            
[1] => AI-02
            
[2] => Double
            
[3] => 4-20mA
            
[4] => 0
            
[5] => 02
            
[6] => 455.695

        
)

    [
3] => Array
        (
            [
0] => 00:03:44 2012/10/21
            
[1] => AI-03
            
[2] => Double
            
[3] => 4-20mA
            
[4] => 0
            
[5] => 03
            
[6] => 7.969

        
)

    [
4] => Array
        (
            [
0] => 00:03:44 2012/10/21
            
[1] => RSSI
            
[2] => unsigned 32bit
            
[3] => 0~31
            
[4] => 0
            
[5] => 10
            
[6] => 20

        
)


    [
5] => Array
        (
            [
0] => 00:03:44 2012/10/21
            
[1] => S01-01
            
[2] => Double
            
[3] => 4-20mA
            
[4] => 1
            
[5] => 01
            
[6] => 3.063

        
)

    [
6] => Array
        (
            [
0] => 00:03:44 2012/10/21
            
[1] => S01-02
            
[2] => Double
            
[3] => 4-20mA
            
[4] => 1
            
[5] => 02
            
[6] => 3.298

        
)

    [
7] => Array
        (
            [
0] => 00:03:44 2012/10/21
            
[1] => S01-03
            
[2] => Double
            
[3] => 4-20mA
            
[4] => 1
            
[5] => 03
            
[6] => 11.990

        
)

// Hier beginnt das nächste Messintervall usw.

    
[8] => Array
        (
            [
0] => 00:03:44 2012/10/21
            
[1] => AI-00
            
[2] => Double
            
[3] => 4-20mA
            
[4] => 0
            
[5] => 00
            
[6] => 7.385

        
)

Besten Dank
LG
Dietmar
Mit Zitat antworten
  #2  
Alt 08.11.2012, 17:45:55
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: vergleichen und bei Bedarf Array erweitern

Zitat:
Zitat von Tikiwiki Beitrag anzeigen
Ich habe 2 Arrays (s. unten) die ich miteinander vergleichen möchte. Das 1. Array beinhaltet alle verfügbaren Sensoren die im 2. Array vorkommen sollten (im Bestfall).
Wenn z. B. im 2. Array der Sensor "S01-01" fehlt, soll das 2. Array um diesen fehlenden Sensor erweitert werden. Das erweitere Element muss das gleiche Datum wie die anderen haben.
Gegenfrage: woher stammen die Arrays? CSV oder Datenbank?
Mit Zitat antworten
  #3  
Alt 08.11.2012, 21:28:15
Tikiwiki Tikiwiki ist offline
Anfänger
 
Registriert seit: Apr 2005
Beiträge: 115
AW: vergleichen und bei Bedarf Array erweitern

Hallo meikel,

Danke für die Antwort. Ist eine durchaus sinnvolle Gegenfrage.
1. Array kommt von der Datenbank
2. Array von einer csv-Datei

Was mir noch aufgefallen ist. Passiert durch copy/paste. Beim zweiten Array nach dem
Vermerk "// Hier beginnt das nächste Messintervall usw.

Beim Datum sollte : 00:33:44 2012/10/21 stehen. Sonst wäre es ja kein neues Messinterval.

Danke
Dietmar
Mit Zitat antworten
  #4  
Alt 10.11.2012, 10:57:27
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: vergleichen und bei Bedarf Array erweitern

Ich verstehe immer noch nicht den Sinn dessen, für den Du einen Algorithmus suchst.
Zitat:
Zitat von Tikiwiki Beitrag anzeigen
1. Array kommt von der Datenbank
Beinhaltet diese Tabelle ausschließlich nur die Namen der Sensoren, die Meßergebnisse liefern sollten?
Ungünstig bei den Bezeichnern ist, daß sie mathematische Symbole enthalten. Ein Ersatz des - (Minus) durch _ (Unterstrich) wäre angeraten.
Zitat:
2. Array von einer csv-Datei
Beinhaltet das CSV File ausschließlich nur ein Meßintervall (optimal) oder werden da kummulativ alle Neuigkeiten angehängt (suboptimal)?
Falls nur ein Meßintervall und keine Speicherung der Ergebnisse in der DB:
erstelle ein assoziatives Array aus der Abfrage nach folgendem Schema:
PHP-Code:
$array = array($SENSOR_NAME => null); 
In der fgetcsv Schleife verwendest Du den Sensornamen als Schlüssel und fügst die Parameter als Subarray ein:
$result_messintervall[$SENSOR_NAME] = array(...);
Um nicht gesetzte Sensoren zu ermitteln, prüfst Du in einer Schleife
PHP-Code:
foreach($result_messintervall AS $sensor_name => $wert){
  if (
is_null($wert))
    
alarm($sensorname);

Falls die Meßergebnisse in einer DB landen:
verwende eine Vorbelegung, bei der ein Wert auf NULL oder FALSE gesetzt wird.
Und danach suchst Du in Abhängigkeit vom Meßintervall.
Mit Zitat antworten
  #5  
Alt 12.11.2012, 14:08:07
Tikiwiki Tikiwiki ist offline
Anfänger
 
Registriert seit: Apr 2005
Beiträge: 115
AW: vergleichen und bei Bedarf Array erweitern

Hallo meikel,

danke nochmals, dass Du Dich meines Problems annimmst. Ich möchte mich aber auch entschuldigen, für die anscheinend lückenhaften Informationen.
Da Dein letzter Beitrag für mich mittlerweile wie ein spanischen Dorf klingt (liegt nicht an Dir), da ich mich gedanklich an die Sensoren, Arrays und foreach-Schleifen verstricke. Darum kann ich nicht mehr beurteilen, ob Dein Vorschlag schon die Lösung wäre. Ich möchte da meine Erklärungen meines Problems erweitern, da ich nicht möchte, Deine Zeit unnötig in Anspruch zu nehmen und Du nur von Vermutung ausgehst.

So und jetzt gehts los:
1. Sinn dieser Fragestellung ist eine Tabelle die die Zeitintervalle, Sensoren, Messwerte übersichtlich darstellt. Eigentlich nichts anderes als eine Art Sitzplatzreservierung.
Es gibt Reihen (sprich das wären die einzelnen Messintervalle) und es gibt Spalten (sprich dies wären die einzelnen Sensoren) und die einzelnen Sitzplätze wären dann die Messwerte.

Die Daten stehen in einer Datenbank mit folgenden Aufbau:
Tabelle "Sensoren" -> sensorid, sensorname, f_messeinheit, etc.
Tabelle "Messwert" -> zeitstempel, f_sensorid, messwert

2. Die CSV-Datei wird tageweise geschickt und hat ca. 1000-2000 Zeilen). Es kommen in die Datenbank nur Werte die auch in der CSV-Datei vorliegen.

Jetzt hätte ich einen anderen Weg eingeschlagen um die Array-Problematik aussen vor zu lassen. Über die SELECT-Abfrage. Das wäre natürlich optimal.

Momentan verwende ich folgende Abfrage (diese liefert alle DS in bestimmten Zeitraum ohne Berücksichtigung, dass ein Sensor zum jeweiligen Zeitstempel fehlt

PHP-Code:
SELECT zeitstempelsensor.langbezeichnungsensor.sensornamesensor.sensoridsensor.messsignalmesswertidmesswertmessbereich_minmessbereich_maxeinheit
FROM messwert
JOIN sensor ON sensorid 
f_sensorid
WHERE 
(zeitstempel BETWEEN '$startdatum' AND '$enddatum')
AND 
f_messeinheitid '1'
ORDER BY zeitstempelsensorid ASC 
Jetzt wäre es eine tolle Sache das er als Ergebnis zusätzlich auch die NULL-Werte ausgeben könnte. Sprich zum Zeitstempel und Sensor = messwert-->NULL

Sollte dann in etwa so aussehen (gekürzt und vereinfacht).
2012-10-20 15:34:20 | Sensor1 | 1 | 7.38
2012-10-20 15:34:20 | Sensor2 | 2 | 13.79
2012-10-20 15:34:20 | Sensor3 | 5 | NULL
2012-10-20 15:34:20 | Sensor4 | 6 | 130.56
usw.

Anmerkung: Der Sensor3 gibt es zwar in der Tabelle "Sensor" aber kein Eintrag in Tabelle "Messwert".

Wäre dies möglich? Auch wenn dafür das Datenbankdesign geändert werden muss ist dies auch kein Problem.

Mein kläglicher Versuch (ist murks aber ich bekomme schon mal eine richtige Anzahl an DS)
PHP-Code:
SELECT f_sensoridsensornamemesswertzeitstempel FROM `sensor`
RIGHT JOIN messwert ON f_sensorid <= sensorid
WHERE 
(zeitstempel BETWEEN '$startdatum' AND '$enddatum') AND f_messeinheitid 
group by f_sensorid
zeitstempel
order by zeitstempel
f_sensorid ASC 
Ich hoffe, dass mein Beitrag für Euch verständlich war und es zu einer Lösungsfindung beträgt.

lg
Dietmar
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
Array in anderes Array übertragen goldlife PHP Grundlagen 3 06.05.2011 11:33:36
Arrayblind tlang78 PHP Grundlagen 2 30.06.2009 16:08:33
Array formatiert ausgeben Faang PHP Grundlagen 3 15.08.2008 02:47:43
Doppelte einträge aus einem Mehrdimensionalen Array aussortieren und löschen PHoenix_KM PHP für Fortgeschrittene und Experten 2 17.04.2008 19:19:53
Einzelne Daten aus Textdatei Auslesen azubinator PHP Grundlagen 153 17.12.2004 14:36:58


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:49:29 Uhr.


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


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