PHP Im Array nach Bedingungen suchen, sortieren und ausgeben.

moby07

Lieutenant
Registriert
Sep. 2007
Beiträge
899
Hallo zusammen,

ich möchte gerne aus folgendem Array folgendes anstellen:

1. Suche im Array alle Zeilen ab, wo LiefererID identisch ist.
2. Wo LiefererID identisch ist, nehme alle Artikel (in dem Fall 91002 und 91003) und speichere es in ein Array.
3. Sortiere in jeder LiefererID alle Artikel und benenne sie mit Position 1, 2, 3, usw.
4. Im letzten Schritt wird jede einzige Bestellung in ein Output als PDF ausgegeben.
(der letzte Schritt ist mir klar, nur 1-3 bekomme ich nicht auf die Reihe)

Array(
[0] => Array ( [ArtikelID] => 91002 => 10 [Preis] => [LiefererID] => 1 [Lieferant] => Zander Feinpapier AG [Bestellmenge] => 50 )
[1] => Array ( [ArtikelID] => 91001 => 12 [Preis] => [LiefererID] => 2 [Lieferant] => Leitz Vertrieb Deutschland GmbH [Bestellmenge] => 100 )
[2] => Array ( [ArtikelID] => 91003 => 15 [Preis] => [LiefererID] => 2 [Lieferant] => Leitz Vertrieb Deutschland GmbH [Bestellmenge] => 75 )
)

Mein Problem sind die Abfragewerte, wie ich das Ganze verbinden kann. Dies soll übrigens variabel mit unterschiedlicher Anzahl von Daten und nicht nur mit diesen Daten passieren. Das oben gezeigte Array ist nur ein kleiner Auszug.

Kann mir jemand zeigen, wie die Abfragen bzw. Schleifen richtig auszusehen haben?

Vielen Dank in voraus für jeden guten Vorschlag!
 
Wie wäre es mal mit einer Datenbank? Dafür sind die eigentlich da...
 
Eine Datenbank wäre hier wirklich angebracht, da diese einfach sortiert werden kann.

Für den PHP Weg: uasort, uksort, usort. Die Callbacks müsstest du natürlich selbst definieren.
 
Alternativ musst du das Array nach dem Key "LiefererID" sortieren (sort() oder so, mal bei php.net gucken).
Und dann eine Schleife durchlaufen lassen.
Dann vergleichst du die LieferantenID mit der aus dem vorherigen Schleifenschritt. Wenn gleich, dann wird der Artikel im Array Artikel[$i] gespeichert, wenn nicht, dann wird erstmal $i um +1 erhöht.
 
Okay, wenn es den Anschein nicht erweckt, ich benutze eine Datenbank. Aus dieser beziehe ich die Daten, welches in mehreren .php-Dateien verarbeitet > Welche Artikel müssen bestellt werden (Meldebestand unterschritten?) > Wer kann es liefern? > Auswahl mit Bestellmenge > Verarbeitung der Daten in eine Bestellung > Ausgabe in PDF.

Edit:
@LinuxMcBook

Dein Vorschlag hört sich gut an. Ich versuche es mal umzusetzen. Danke!
 
Zuletzt bearbeitet:
Wenn du schon eine Datenbank in der Hinterhand hast, warum lässt du dir von der die Daten nicht gefiltert und sortiert ausgeben? Das ist nicht nur signifikant leichter zu schreiben, es ist auch um Welten schneller.
 
Wenn ich z. B. Artikel 1 beim Lieferer 1, Artikel 2 beim Lieferer 3, Artikel 3 beim Lieferer 5 und Artikel 4 beim Lieferer 1 auswähle, muss an einer Stelle eine Sortierung stattfinden, an dem ich allen Lieferanten die Bestellpositionen geben kann, die nachher auf einer Rechnung erscheinen.
Ich habe es jetzt so verstanden, dass ich zwecks Schleife eine Sortierung machen muss. Oder hast du einen leichteren/besseren Vorschlag?
 
Zuletzt bearbeitet:
Hallo moby07,

Datenbank
Dein Problem lässt sich wirklich mit einem Statement lösen.

Programmiertechnische Seite
Du hast doch schon den richtigen Ansatz gemacht. Zerlege deine Probleme in lösbare einfache Teilprobleme (http://de.wikipedia.org/wiki/Teile_und_herrsche_(Informatik)).
Da du ja schon eine Vorstellung hast, wie dein Array auszusehen hat, bewege dich in die Richtung. PHP hat dazu noch sehr viele native Funktionen, die sich mit Arrays beschäftigten (http://php.net/manual/de/book.array.php).

Wenn die Daten irgendwann zunehmen, kann ich dir versichern, dass eine Abfrage über die Datenbank dir einiges an Abtrieb gibt (Falls die Abfrage geschickt gewählt wurde).

Liebe Grüße
 
Ich würde auch dringend die Abfrage die das Ergebnis geliefert hat aufteilen oder erweitern. So nutzt man die Datenbank (Daten verarbeiten und speichern) nun gar nicht im Sinne des Erfinders.

Ansonsten über die LieferID sortieren und dann das Array durchgehen. Je nach Prüfung, die jeweilige Datensatz-ID (Index) in eines von 2 Hilfsarrays speichern. Dann hast du immer eine Liste, welcher Datensatz aus dem Originalarray welche Bedingungen erfüllt.

Gruß
Spike
 
Vielen Dank für die guten Ratschläge! Mittlerweile konnte das Problem gelöst werden, auch wenn durch fremde Hilfe.:-)
 
Zurück
Oben