explode Funktion nutzen aus einem bestehenden Array
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"; 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
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"; 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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 100162
Url: https://administrator.de/forum/explode-funktion-nutzen-aus-einem-bestehenden-array-100162.html
Ausgedruckt am: 19.04.2025 um 05:04 Uhr
3 Kommentare
Neuester Kommentar
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:
Ich glaub das ist das was du brauchst mal in Grundzügen.
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:
$con = mysql_connect( "host", "user", "pw" ) or die( mysql_error() );
$db = mysql_select_db( "dbname", $con ) or die( mysql_error() );
$qry = mysql_query( "SELECT column(s) FROM table WHERE ... ", $cnn) or die( mysql_error() );
$out = array();
while( $data = mysql_fetch_array( $qry ) ) {
$explodedData = explode( "\t", $data );
// Jetzt sind je nachdem wo sich die gesuchten Werte befinden, die Indexes anzupassen
$dat = $explodedData[1].", ".$explodedData[2].", ".$explodedData[3];
// Das aussortieren der Doppelten funktioniert in dieser Art http://at2.php.net/array_search
if( !array_search( $dat, $out ) ) {
// Jetzt tragen wir das ganze ein.
$out = $dat;
}
}
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:
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
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:
$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