Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst explode Funktion nutzen aus einem bestehenden Array

Mitglied: gechger

gechger (Level 1) - Jetzt verbinden

24.10.2008, aktualisiert 10.01.2009, 4201 Aufrufe, 3 Kommentare

Ich habe mich mit dem Explode beschäftigt, komme aber nun nicht weiter

Hallo Forum,

ich habe ein kleines Script welches mir einiges an Daten aus einer MYSQL Datenbank in ein Array schreibt. Diese Daten sehen jetzt so aus:

2008-10-10_07:42:03 table=BB bTYP=10100 bLOG=1567 bDAT=2008-10-10_07:39:45 bIMP= bFLAG=0 bGPS=B,,,,,, bTER=5555 bPER=
blog=: bLOG=1567, terminalnummer=: bTER=5555 , Personalnummer=: bPER= 2008-10-10_07:42:03 table=BB bTYP=10100 bLOG=1567 bDAT=2008-10-10_07:39:45 bIMP= bFLAG=0 bGPS=B,,,,,, bTER=5555 bPER=
2008-10-10_07:42:04 table=BB bTYP=10111 bLOG=1567 bDAT=2008-10-10_07:39:51 bIMP= bFLAG=0 bGPS=V,5236.2929,N,01002.9705,E, bTER=5555 bPER=
2008-10-10_07:42:06 table=BB bTYP=10101 bLOG=1567 bDAT=2008-10-10_07:39:57 bIMP=1 bFLAG=0 bGPS=V,5236.2929,N,01002.9705,E, bTER=5555 bPER=
2008-10-10_07:42:07 table=BB bTYP=10105 bLOG=1567 bDAT=2008-10-10_07:40:15 bIMP=648 bFLAG=0 bGPS=V,5236.2929,N,01002.9705,E, bTER=5555 bPER=
2008-10-10_07:42:12 table=BB bTYP=10105 bLOG=1567 bDAT=2008-10-10_07:40:45 bIMP=1565 bFLAG=0 bGPS=V,5236.2929,N,01002.9705,E, bTER=5555 bPER=

je nach Abfragezeitraum können in dem Array bis zu 5000 Datensätze stehen. Die einzelnen Informationen stehen mit TAB getrennt hintereinander in einer Spalte "Werte".
Mein Ziel ist es, im ersten Schritt alle nicht benötigten Informationen raus zu schmeissen. Mich interessiert nur die Information "bLOG=XXXX" , "bTER=XXXX" und "bPER=XXXX". Alles andere will ich nicht sehen.
Im zweiten Schritt will ich alle doppelten Werte eliminieren. Zum Schluß soll eine Liste erscheinen, die in etwa so aussieht:
bLOG=1234, bTER=5678, bPER=000123456789
bLOG=1234, bTER=5678, bPER=0009654786
bLOG=6363, bTER=2233, bPER=00012358912
usw.


$sql1 = ("SELECT * FROM $tabelle1 where datum > '$datumvon' and datum < '$datumbis' ");

Ausgabe der abgefragten Informationen...
$abfrage=mysql_Query ($sql1);
...und Ausgabe in ein Array
$row1 = mysql_fetch_row($abfrage);

$idintern = "$row1[0]"; Inhalte des Arrays, die Indexnummern per ECHO abgefragt, liefert genaue Informationen
$werte = "$row1[1]";
$datum = "$row1[2]";
$flag ="$row1[3]";
Ausgabe der Informationen
$abfrage = mysql_db_query($dbname1,$sql1); //or die(mysql_error());

$data = "$werte";
list($dat, $table, $typ, $blog, $bdat, $imp, $flag, $gps, $bter, $bper) = explode("\t", $werte);
echo ("blog=: $blog, terminalnummer=: $bter, Personalnummer=: $bper");


Dieser Codeschnipsel funktioniert vom Prinzip her, aber ich bekomme immer nur den ersten Datensatz des ursprünglichen Arrays angezeigt und nicht alle. Das zweite Ziel, alle Doppelten Daten raus zu filtern konnte ich also noch gar nicht in Angriff nehmen.

Vielleicht kann man bereits in der SQL Abfrage einstellen, daß nur die gewünschten Teilinformationen heruntergeladen werden. Dann kann ich das bestehende Array zur Ausgabe nutzen und darüber versuchen, den Filter zu setzen. Die explode Funktion wäre mir aber sympathischer.

Bin für jede Idee dankbar.

Schöne Grüße
Christof
Mitglied: godlie
24.10.2008 um 17:30 Uhr
Also prinzipiell:
Niemals mehrere Values in ein Feld schreiben, dass heist:
Wenn ich mehrere sachen hab, dann diese auch in mehrer Spalten aufteilen.
Vorteil: Ich kann suchen und sortieren und vieles mehr.

Aber nun zu deinem Problem:
Könntest du den Datensatz welcher aus der DB kommt mal in einer Form hier reinschreiben das man auch nachvollziehen kann wie der aussieht?
Kann leider aus dem was hier steht net wirklich was bauen.
Aber vom Prinzip her läuft sowas so ab:
01.
$con = mysql_connect( "host", "user", "pw" ) or die( mysql_error() ); 
02.
$db = mysql_select_db( "dbname", $con ) or die( mysql_error() ); 
03.
$qry = mysql_query( "SELECT column(s) FROM table WHERE ... ", $cnn) or die( mysql_error() ); 
04.
$out = array(); 
05.
while( $data = mysql_fetch_array( $qry ) ) { 
06.
  $explodedData = explode( "\t", $data ); 
07.
  // Jetzt sind je nachdem wo sich die gesuchten Werte befinden, die Indexes anzupassen 
08.
  $dat = $explodedData[1].", ".$explodedData[2].", ".$explodedData[3]; 
09.
  // Das aussortieren der Doppelten funktioniert in dieser Art http://at2.php.net/array_search 
10.
  if( !array_search( $dat, $out ) ) { 
11.
  // Jetzt tragen wir das ganze ein. 
12.
    $out[] = $dat; 
13.
14.
}
Ich glaub das ist das was du brauchst mal in Grundzügen.
Bitte warten ..
Mitglied: gechger
24.10.2008 um 17:59 Uhr
na klar:
die Infos kommen in einer Zeile und sind mit TAB getrennt. Der Übersichtlichkeit halber schreibe ich sie mal untereinander:
2008-10-10_07:42:06 [TAB]
table=BB [TAB]
bTYP=10101 [TAB]
bLOG=1567[TAB]
bDAT=2008-10-10_07:39:57 [TAB]
bIMP=1 [TAB]
bFLAG=0 [TAB]
bGPS=V,5236.2929,N,01002.9705,E,[TAB]
bTER=5555 [TAB]
bPER=

Mal sehen ob ich alles verstehe.
Zeile 1 - 3 holt die Daten aus der SQL Datenbank.
in Zeile 4 wird das SQL-Array gefüllt.
Zeile 5 startet eine Schleife, die durch die Daten aus der Datenbank läuft, die dann
in Zeile 6 durch den explode Befehl nach TAB getrennt werden und die Ergebnisse in die Variable $explodeddata schreibt.
$explodeddata enthält jetzt das Array aus der explode Funktion
Da ich 10 TAB getrennte Felder habe, muß ich bei [0] beginnend die benötigten Felder in $dat schreiben.
$dat kann dann mit echo ausgegeben werden.

Auf die Funktion !array_search bin ich noch nicht gestossen. Ich interpretiere das mal so, das die Werte aus $dat, also die bereits eingeschränkte Ausgabe, verglichen werden mit den Werten aus dem kompletten SQL-String. Ich bekomme dann den ersten passenden String zurück.

Mal sehen, mein String nach dem explode sieht etwas so aus:
bLOG=1234 bTER=5678 bPER=000123456789
Ist es richtig, daß die Search Funktion auch nur diese Werte vergleicht und bei doppeltem Vorkommen nur den ersten ausgibt?
Das wäre ja dann die Lösung. Ist da keine while Schleife nötig? DIe Ausgabe darf ja nicht nach dem ersten Treffer aufhören. Ich brauche alle "ungleichen" Sätze der SQL Abfrage.

Ich teste das mal aus.

Vielen vielen Dank für diesen Lösungsansatz.

Schöne Grüße
Christof
Bitte warten ..
Mitglied: godlie
24.10.2008 um 18:29 Uhr
Also zu deinen Ansätzen:
Zeile 4 ist dafür da ein neues array zu initialisieren das leer ist für die Ausgabe dann.

Die Felder die du brauchst sind:

01.
$explodedData[3], $explodedData[8], $explodedData[9]
Nein die array_search sucht nach einem bereits vorhanden Wert, wird dieser gefunden, so wird dessen Index ausgeben, wird dieser nicht gefunden wird FALSE zurückgegeben.
Mit dem ! vor der Funktion wird eine Negierung gemacht, sodass im Falle von FALSE ein TRUE zurückkommt und dann wird das in der If Schleife ausgeführt.

Alles weitere solltest beim versuchen rausbekommen.

grüße
Bitte warten ..
Ähnliche Inhalte
PHP
Explode geht nur local und nicht online
gelöst Frage von ppmk22PHP2 Kommentare

Hallo und Guten Tag, könnt Ihr mir bitte sagen warum dieser Code auf online nicht korrekt ausgeführt wird? Code: ...

Batch & Shell

Powershell Wenn-Dann bzw. If-Then Funktion für .csv nutzen

gelöst Frage von DelPinguinoBatch & Shell4 Kommentare

Hallo zusammen, ich habe bereits mehrfach sehr nützliche Informationen hier gefunden und bin deshalb guter Dinge, dass mir auch ...

Batch & Shell

Erstellen eines GUI in Powershell und das nutzen vom Funktionen mit Usereingabe

gelöst Frage von IT-Guy77Batch & Shell2 Kommentare

Hallo zusammen, folgendes Problem: Ich arbeite derzeit an einem GUI in Powershell für eine kleine Sammlung von Skripten um ...

Batch & Shell

Leere Array-Werte aus einem Array entfernen

gelöst Frage von ToniHoBatch & Shell3 Kommentare

Hallo zusammen, ich bin dabei ein Powershell-Script zu schreiben, welches diverse Reports generieren kann. Für die Eingabe von SamAccountNames ...

Neue Wissensbeiträge
Windows 10

USB Maus und Tastatur versagen Dienst unter Windows 10

Erfahrungsbericht von hardykopff vor 7 StundenWindows 103 Kommentare

Da steht man ziemlich dumm da, wenn der PC sich wegen fehlender USB Tastatur und Maus nicht bedienen lässt. ...

Administrator.de Feedback
Update der Seite: Alles zentriert
Information von Frank vor 10 StundenAdministrator.de Feedback10 Kommentare

Hallo User, die größte Änderung von Release 5.8 ist das Zentrieren der Webseite (auf großen Bildschirmen) und ein "Welcome"-Teaser ...

Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 1 TagHumor (lol)4 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 1 TagGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Heiß diskutierte Inhalte
Server-Hardware
Welche Rolle spielt Design bei Enterprise IT Hardware?
Frage von ApolloXServer-Hardware17 Kommentare

Ich arbeite für einen internationalen Elektronikhersteller in der Forschung und meine Aufgabe ist es, Feedback von Nutzern in Hinsicht ...

Windows Netzwerk
WSUS4 und Windows 10 Updates automatisch installieren
Frage von sammy65Windows Netzwerk15 Kommentare

Hallo miteinander, ich habe mit einen neuen WSUS Server aufgesetzt Server 2016 darauf einen aktuellen WSUS. Grund, wir stellen ...

Speicherkarten
Vergessliche USB-Sticks?
Frage von hanheikSpeicherkarten14 Kommentare

Ich habe in den letzten Tagen 500 USB-Sticks mit Bilddateien bespielt. Obwohl ich die Dateien mit größter Sorgfalt kopiert ...

Switche und Hubs
Cisco SG350X-48 AdminIP in anderes VLAN
Frage von lcer00Switche und Hubs14 Kommentare

Hallo zusammen, ich habe ein Problem mir einem Cisco SG350X-48 bei der Erstinstallation wurde eine IP 192.168.0.254 (Default VLAN ...