kostenloser Webspace werbefrei: lima-city


aus einem großen Array mehrere machen?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    firmastart

    firmastart hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. m******************r

    $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
  4. 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.
  5. Autor dieses Themas

    firmastart

    firmastart hat kostenlosen Webspace.

    @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
  6. 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
  7. 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.
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!