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

PHP array Inhalt falsch merdimensional rekursiv FOR

Mitglied: Midivirus

Midivirus (Level 2) - Jetzt verbinden

22.07.2010, aktualisiert 16:25 Uhr, 2257 Aufrufe, 1 Kommentar

Moin Gemeinde,

auch ich hab mal wieder eine coole Frage.
Gerade bastel ich so nebenbei an einer Auswertung eines Bestellsystemes. Das alle Datensätze markieren soll, welche innerhalb kurzer Zeit bestellt wurden.

Beispiel.
2010-07-22 11:42:48
2010-07-22 11:44:14
(mittels substr wird der Wert auf '2010-07-22 11:' gekürzt)

Logik:
Das SQL Statement wird in ein Array gepakt, dadurch entsteht ein merdimensionales Array. Damit ich alle Datensätze zweimal anschaue, werden zwei FOR-Schleifen ineinander gepackt,
diese leuchten mittels IF die beiden aktuellen Datensätze ab, ob dort Gemeinsamkeiten existieren.
(Bestelldatum, Artikelnummer, Lager)

Da das Array jetzt einen Umfang von etwa 1500 Datensätze hat + 20 Untersätze (1500*20 = 30.000) haben wir natürlich einen großen Datenwust!
Aber ich war/bin mir sicher, dass auch PHP dies verkaftet.

Die Datenbank ist postgres.

Problem:
Es werden nicht mehr alle Kombinationen herausgefilter, da händisch nachgewiesen.

Das Konstrukt sieht dann in etwa so aus:
Array > Hauptarray
    [0] => Array > SQL-Datensätze 
            [0] => 2010-07-22 09:33:58 
            [bestellt] => 2010-07-22 09:33:58 
            [1] =>  
            [geliefert] =>  
            [2] =>  
            [supcontrol] =>  
            [3] => G55.04212 
            [liefnummer] => G55.04212 
            [4] => Katzenhäuschen 4 größe 8 
            [liefbezeichnung] => Katzenhäuschen 4 größe 8 
            [5] => G55.04212 
            [kdnummer] => G55.04212 
            [6] => Katzenhäuschen 4 größe 8 
            [kdbezeichnung] => Katzenhäuschen 4 größe 8 
            [7] => Monster gGmbH 
            [kunde] => Monster gGmbH 
            [8] => calc2china 
            [lieferant] => calc2china 
            [10] => 17472761473 
            [transponder] => 17472761473 
            [11] => Stellplatz 5 
            [lager] => Stellplatz 5 
        )
01.
for($j = 0; $j < count($ergebnisse); $j++){ 
02.
	for($i = ($j-1); $i < count($ergebnisse); $i++){ 
03.
		if($i != $j && $ergebnisse[$i]['liefnummer'] == $ergebnisse[$j]['liefnummer'] && $ergebnisse[$i]['lager'] == $ergebnisse[$j]['lager'] && substr($ergebnisse[$i][0],0,13) == substr($ergebnisse[$j][0],0,13)){ 
04.
			if($j - $i == 1 || $j - $i == -1) 
05.
				$ausgabe2 .= "<TR><TD>j=".$j." i=".$i."</TD><TD>".$ergebnisse[$i][0]."</TD><TD>".$ergebnisse[$i][3]."</TD><TD>".substr($ergebnisse[$i][4],0,12)."</TD><TD>".$ergebnisse[$i][5]."</TD><TD>".substr($ergebnisse[$i][6],0,12)."</TD><TD>".substr($ergebnisse[$i][7],0,12)."</TD><TD>".substr($ergebnisse[$i][8],0,12)."</TD>><TD>".$ergebnisse[$i][10]."</TD><TD>".lagerortshort($ergebnisse[$i]['lager'])."</TD></TR>\n"
06.
			$count2++; 
07.
08.
09.
	$count++; 
10.
}
Ausgabe:
01.
<TR><TD>j=2 i=3 </TD><TD >2010-07-20 13:23:25</TD><TD>G55.04212</TD><TD>Katzenhäuschen 4 größe 8</TD><TD>G55.04212</TD><TD>Katzenhäuschen 4 größe 8</TD><TD>Monster gGmbH</TD><TD>calc2china</TD><TD>17472761473</TD><TD>Stellplatz 5</TD></TR>
Zur Info:
Es wird in Zeile 3 auf gleiche Lagerorte, Bestelldatum und Artikelnummer kontrolliert.

Mit zwischenzeitlich anderem PHP-Code kamen dann solche Ergebnisse bei heraus:
Genau gleiche Daten mit nur unterschiedlichen counter-Werten der FOR-Schleifen. [j= äußere; i= innere]

i=1505 j=1508	2010-07-22 08:07:47	441-16	301221	301221	PAN-16X2-SI	Monster gGmbH	calc2china	17472761473	BG 02 
i=1510 j=1508	2010-07-22 08:06:55	441-16	301221	301221	PAN-16X2-SI	Monster gGmbH	calc2china	17547307693	BG 02 
i=1505 j=1510	2010-07-22 08:07:47	441-16	301221	301221	PAN-16X2-SI	Monster gGmbH	calc2china	17472761473	BG 02 
i=1508 j=1510	2010-07-22 08:07:34	441-16	301221	301221	PAN-16X2-SI	Monster gGmbH	calc2china	4418947752	E 101
Man beachte hier die Zeile 1 und 3 ... ich kann mir nicht erklären, weshalb die Kombination 1505 - 1508 und 1505 - 1510 ein gleiches Ergebnis liefern sollten, wenn mittels print_r($ergebnis); es anders und korrekt ausgegeben wird.

=> Mit obigen hinterlegten PHP - Code werden die Datensätze gar nicht mehr ausgegeben. <=

Mein Ziel ist es, das Array mit sich selbst zu vergleichen und mittels substr und mehreren IFs doppelte Einträge sichtbar zu machen.

Sollte jemand Rückfragen haben oder meinen komplizierten Text nicht verstehen, bitte kurz anschreiben oder kommentieren.


Grüße aus dem bedeckten OWL,
euer Midi
Mitglied: dog
22.07.2010 um 21:33 Uhr
for($j = 0; $j < count($ergebnisse); $j++){
#$j ist jetzt 0
for($i = ($j-1); $i < count($ergebnisse); $i++){
#$i ist jetzt -1 (0-1)

Warum?
Verstehe ich nicht.
Der erste Vergleich ist so immer ungültig, weil es kein -1 gibt.

Übrigens gibt es für sowas SQL:
01.
SELECT  
02.
	GROUP_CONCAT(b.id SEPARATOR ',') AS sim 
03.
FROM 
04.
	bestell a 
05.
INNER JOIN 
06.
	bestell b ON (a.id != b.id AND a.liefnummer = b.liefnummer AND a.lager = b.lager AND b.bestellt BETWEEN a.bestellt - 60*60 AND a.bestellt + 60*60) 
07.
GROUP BY 
08.
	a.liefnummer,a.lager
01.
+------+ 
02.
| sim  | 
03.
+------+ 
04.
| 1,2  |  
05.
| 3,4  |  
06.
+------+
01.
SELECT * FROM bestell
01.
+------+---------------------+------------+-------+ 
02.
| id   | bestellt            | liefnummer | lager | 
03.
+------+---------------------+------------+-------+ 
04.
|    1 | 2010-07-21 12:13:25 |        110 | a     |  
05.
|    2 | 2010-07-21 12:13:27 |        110 | a     |  
06.
|    3 | 2010-07-21 15:12:17 |        118 | b     |  
07.
|    4 | 2010-07-21 15:14:17 |        118 | b     |  
08.
|    5 | 2010-07-21 17:18:09 |        118 | b     |  
09.
|    6 | 2010-07-21 19:12:01 |        112 | c     |  
10.
+------+---------------------+------------+-------+ 
11.
6 rows in set (0.00 sec)
(MySQL Syntax)

Mit einer richtig indizierten Tabelle dürfte das seeeeehr viel schneller sein als PHP.
Bitte warten ..
Ähnliche Inhalte
PHP
PHP - unique-array() und sort()
gelöst Frage von ThomasXYZPHP14 Kommentare

Hallo zusammen, ich bin gerade leicht am verzweifeln und finde nicht so recht die Lösung. Ich bekomme per Datenbankabfrage ...

PHP
PHP Array SELECT möglich
gelöst Frage von rumbleDomPHP1 Kommentar

Hallo Gemeinde, warscheinlich sehe ich den Wald vor lauter Bäumen mal wieder nicht. Kurzer Tipp wäre daher hilfreich :) ...

PHP
Mit PHP SQL Array Abfrage
gelöst Frage von gamerffPHP3 Kommentare

Hallo Forum, ich bin grade an einem Projekt dran ein Telefonbuch mit Mysql, PHP und HTMl zu erstellen. Ich ...

PHP
Php regex und Array
gelöst Frage von Thomas91PHP5 Kommentare

Hallo zusammen, ich benötige dringen hilfe mit php, regex und einem Array. Ich habe eine Textdatei in der eine ...

Neue Wissensbeiträge
Internet

Datendealing im WWW Tracking Methoden immer brutaler

Information von sabines vor 1 MinuteInternet

Interessanter Artikel zum Thema Tracking im WWW und die immer "besseren" Methoden des Trackings. Professor Arvind Narayanan (Princeton-Universität) betreibt ...

Erkennung und -Abwehr

Ups: Einfaches Nullzeichen hebelte den Anti-Malware-Schutzt in Windows 10 aus

Information von kgborn vor 12 StundenErkennung und -Abwehr

Windows 10 ist das sicherste Windows aller Zeiten, wie Microsoft betont. Insidern ist aber klar, das es da Lücken, ...

Windows 10

Windows 10 on ARM: von Microsoft entfernte Info - Klartext, was nicht geht

Information von kgborn vor 14 StundenWindows 10

Windows 10 on ARM ist ja eine neue Variante, die Microsoft im Verbund mit Geräteherstellern am Markt etablieren will. ...

Microsoft
TV-Tipp: Das Microsoft-Dilemma
Information von kgborn vor 14 StundenMicrosoft8 Kommentare

Aktuell gibt es in Behörden und in Firmen eine fatale Abhängigkeit von Microsoft und dessen Produkten. Planlos agieren die ...

Heiß diskutierte Inhalte
Windows 10
Windows 10 (1709) Tastur und Maus wieder einschalten?
Frage von LochkartenstanzerWindows 1026 Kommentare

Moin, Ich habe von einem Kunden einen Win10-Rechner bekommen, bei dem weder Tastatur noch Maus geht. Die Hardware funktioniert ...

Firewall
RB2011 Firewall Rule eine bestimmte Mac oder IP Adresse nicht zu blockieren
Frage von lightmanFirewall15 Kommentare

Hallo liebes Forum mit ihren Spezialisten. Ich habe meine Firewall so konfiguriert das kein Endgerät ohne meine Speziellen Erlaubnis ...

Humor (lol)
Was könnte man mit einem Server machen? Idee gesucht
Frage von 2SeitenHumor (lol)15 Kommentare

Hey Zusammen Ich habe einen alten HP G2 Rackserver zu Hause rumliegen. 28GB Ram, 1xAMD Prozi mit etwa 2GHz. ...

Server
Route-Befehl Unterstützung (unter CMD)
gelöst Frage von FKRR56Server14 Kommentare

Guten Tag , i.M. habe ich Probleme über den CMD-Route-Befehl ein Routing auf einen entfernten Server zuzulassen. Der Server ...