Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Frage Entwicklung PHP

Mitglied: gechger

gechger (Level 1) - Jetzt verbinden

24.10.2008, aktualisiert 10.01.2009, 4149 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Microsoft Office
gelöst Excel: Text in Zellbereich prüfen mit Vergleichstext ggf. mit Exact-Funktion (5)

Frage von Michi1 zum Thema Microsoft Office ...

JavaScript
AngularJS Variable über Input in Funktion ausführen

Frage von badkilla zum Thema JavaScript ...

LAN, WAN, Wireless
Hat On Networks PL500PS WLAN-Funktion? (4)

Frage von Andy1987 zum Thema LAN, WAN, Wireless ...

PHP
gelöst Php regex und Array (5)

Frage von Thomas91 zum Thema PHP ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
RODC über VPN - Verbindung weg (10)

Frage von stefan2k1 zum Thema Windows Server ...