aus einem großen Array mehrere machen?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
aufteilung
code
datenbestand
einzigen ergebnis
fehlenden dimension
gleichen status
index
info
leere eckige klammern
nummer
rutsch
schnellere suche
seltsames array
speichern
status
url
vorstellen
werte vorkommen
zugriff
-
Hallo
wie zerlege ich am besten ein großes Array in mehrere, die jeweils den gleichen Status-Wert haben
BSP
array ( [0] => array ( [id] => xxxa [name] => blablabla [status] => 1 [info] => blablabla } [1] => array ( [id] => xxxb [name] => blablabla [status] => 2 [info] => blablabla } [2] => array ( [id] => xxxc [name] => blablabla [status] => 3 [info] => blablabla } [3] => array ( [id] => xxxd [name] => blablabla [status] => 1 [info] => blablabla } [4] => array ( [id] => xxxe [name] => blablabla [status] => 3 [info] => blablabla } [4] => array ( [id] => xxxf [name] => blablabla [status] => 1 [info] => blablabla } ... usw }
weil hier im BSP 3 verschiedene [status] Werte vorkommen
hätte ich gerne 3 Arrays, jeweils passend zum Status, also etwa so:
array ( [0] => array ( [id] => xxxa [name] => blablabla [status] => 1 [info] => blablabla } [1] => array ( [id] => xxxd [name] => blablabla [status] => 1 [info] => blablabla } [2] => array ( [id] => xxxf [name] => blablabla [status] => 1 [info] => blablabla } } array ( [0] => array ( [id] => xxxb [name] => blablabla [status] => 2 [info] => blablabla } } array ( [0] => array ( [id] => xxxc [name] => blablabla [status] => 3 [info] => blablabla } [1] => array ( [id] => xxxe [name] => blablabla [status] => 3 [info] => blablabla } }
bekomme das zwar hin aber nicht brauchbar (nicht schön) weil ich erst alle status Möglichkeiten ermittle
und dann x-Mal (Anzahl unterschiedlicher [status] Vorkommen) das ursprüngliche Array durchlaufe
was bei einem größeren Array (Datenbestand) zu timeout oder memory_limit Fehler führt.
aber wie mache ich sowas ohne das ursprüngliche Array x-Mal durchlaufen zu lassen ?
geht das in einem rutsch ?
Danke
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
$newarr = array(); foreach($array as $val) { $newarr[$val["status"]] = $val; }
Könnte mir vorstellen, dass das so hinhaun könnte, probiert hab ichs allerdings nicht.
LG
Beitrag zuletzt geändert: 18.7.2011 20:38:46 von markus-niederbrucker -
Ich würde es so machen:
$sarr = ...... $map = array(); $arrays = array(); for( $i = 0; $i < count( $sarr ); $i++ ) { $key = array_search( $sarr[$i]['status'], $map ); if( $key !== false ) { $arrays[$key][] = $sarr[$i]; } else { $index = count( $arrays ); $map[$index] = $sarr[$i]['status']; $arrays[$index] = array(); $arrays[$index] = $sarr[$i]; }
Das sollte der schnellste Ansatz sein, allerdings verbraucht die Map ($map) auch etwas mehr Speicher, dafür ermöglicht sie aber schnellere Suche und Zugriffe.
Generell brauchst du aber für so eine Aufteilung midnesten doppelt soviel Speicher wie der Ursprungsarray.
Du könntest maximal noch jedes bearbeitete Element aus dem Ursprungsarray löschen (unset), dafür gebe ich aber keine Garantie, was da passiert oder passieren kann. -
@markus-niederbrucker .... hmmm, neee, aber fast
damit bekomme ich zwar zu jedem Status ein Array,
aber je mit nur einem einzigen Ergebnis, also 1-dimensional
ich brauche aber die Daten wieder 2-dimensional,
weil je status ja auch mehrfach vorkommt.
... ha, ich glaub ich hab's....
einfach noch den Zähler [ ] hinten dran ans neue Array (leere eckige Klammern)
$newarr = array(); foreach($array as $val) { $newarr[$val["status"]][] = $val; }
dann klapps auch mit der 2ten Dimensoin ^^ :=)
hab Dank !
EDIT:
@reimann
sorry, mit dem Code bekomme ich keine Ausgabe mit print_r($arrays);
allerdings bekomme ich auch mein Error_Reporting nicht an ..... :P
ahhh
.... die Schleife ist nicht geschlossen am Ende fehlt eine geschweifte Klammer }
dann kommt ein sehr seltsames Array ?! ...
müsste unten nicht $arrays[$key][$index] rein ?
... aber so ganz kapiert hab ich den Code noch nicht
Beitrag zuletzt geändert: 18.7.2011 21:18:56 von firmastart -
Ja hab grade gemerkt, dass ich da zuviel von stärker eingegrenzten Sprachen ausgegangen bin, aber unter PHP ist die andere Lösung besser.
Mein Code schafft sozusagen einfach mehrere Arrays in einem Array, wo jeder Array nur Elemente mit gleichen Status enthält, allerdings sind die eben mit Nummern indexiert nicht mit dem Status selbst.
Naja ich hab dasselbe Problem mit der fehlenden Dimension:
$arrays[$index][] = $sarr[$i]; } }
Mit dem Status als Index ist es eben nicht mehr so kompliziert, also denk ich ist das andere mehr dein Fall.
Beitrag zuletzt geändert: 18.7.2011 21:35:53 von reimann -
markus-niederbrucker schrieb:
$newarr = array(); foreach($array as $val) { $newarr[$val["status"]] = $val; }
Könnte mir vorstellen, dass das so hinhaun könnte, probiert hab ichs allerdings nicht.
LG
Ich wäre auch für diese Variante. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage