Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] array filtern

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] array filtern

    Hallo,

    ich habe ein zweidimensionales array der form
    array[index][a,b,c,d]

    folgendes muß nun bewerkstelligt werden:

    c muß indexübergreifend addiert werden, wenn a && b mehrfach vorkommt.

    um das klarer zu machen, ein beispiel:

    sagen wir das array sieht so aus:

    [0][1,2,3,4]
    [1][1,3,4,4]
    [2][1,3,2,7]
    [3][1,2,8,1]


    bei index 0 und 3 sind die einträge a && b gleich => c = 11
    bei index 1 und 2 sind die einträge a && b gleich => c = 6

    das ergebnis dieser operation soll dann in einem neuen array wie folgt gespeichert werden:
    [a][b,c]

    gibt es da einen cleveren weg oder muß man das irgendwie sortieren und dann weiterverarbeiten?

    Danke

  • #2
    Mag eleganter gehen, aber ich würde es einfach in zwei Schritten ungefähr so machen, falls es keine Argumente dagegen gibt:

    PHP-Code:
    <?php

    function step1($data)
    {
        
    $regrouped = array();

        foreach (
    $data as $item) {
            list(
    $a$b$c/*skip*/) = explode(','key($item));

            if (!
    array_key_exists($a$regrouped)) {
                
    $regrouped[$a] = array();
            }

            if (!
    array_key_exists($b$regrouped[$a])) {
                
    $regrouped[$a][$b] = 0;
            }

            
    $regrouped[$a][$b] += $c;
        }

        return 
    $regrouped;
    }

    function 
    step2($data)
    {
        
    $regrouped = array();

        foreach (
    $data as $a => $data2) {
            foreach (
    $data2 as $b => $c) {
                if (!
    array_key_exists($a$regrouped)) {
                    
    $regrouped[$a] = array();
                }

                
    $regrouped[$a][$b ',' $c] = true;
            }
        }

        return 
    $regrouped;
    }

    $data[0]['1,2,3,4'] = true;
    $data[1]['1,3,4,4'] = true;
    $data[2]['1,3,2,7'] = true;
    $data[3]['1,2,8,1'] = true;

    var_dump(step2(step1($data)));

    //array(1) {
    //  [1]=>
    //  array(2) {
    //    ["2,11"]=>
    //    bool(true)
    //    ["3,6"]=>
    //    bool(true)
    //  }
    //}

    Kommentar


    • #3
      Superklasse!

      Kommentar


      • #4
        sieht so aus, als würde ich noch eine Anpassung benötigen. Die Arrayeinträge haben bei mir diese Form:

        bei index 1 z.B.:
        Code:
        Array ( [0] => 2 [1] => 1 [2] => 3 [3] => NXT-P6P6-XBVB-E89X-6PA8K )
        das ganze array, das als $data verarbeitet werden soll, sieht so aus:

        Code:
        array(4) { [1]=> array(4) { [0]=> string(1) "2" [1]=> int(1) [2]=> int(3) [3]=> string(24) "NXT-P6P6-XBVB-E89X-6PA8K" } [2]=> array(4) { [0]=> string(1) "2" [1]=> int(1) [2]=> int(5) [3]=> string(24) "NXT-P6P6-XBVB-E89X-6PA8K" } [3]=> array(4) { [0]=> string(1) "1" [1]=> int(2) [2]=> int(4) [3]=> string(24) "NXT-P6P6-XBVB-E89X-6PA8K" } [4]=> array(4) { [0]=> string(1) "1" [1]=> int(2) [2]=> int(2) [3]=> string(24) "NXT-P6P6-XBVB-E89X-6PA8K" } }
        entweder manipuliere ich mein array, damit es zu der Funktion paßt oder ich schreib die Funktion um. Ich hab schon probiert, aber irgendwo hakt es noch.

        wenn ich mein ausgangsarray anpassen will, ist auch was faul.
        warum ist folgender ausdruck nicht zulässig:
        PHP-Code:
        $l 0;
        foreach (
        $betArray as $item) {
            
        $data[$l] = [$item[0],$item[1],$item[2],$item[3]];
            
        $l++;    

        Kommentar


        • #5
          entweder muß ich mein $data array so manipulieren, daß es von den Funktionen verarbeitet wird oder ich muß die Funktionen ändern.
          Leider komm ich nicht weiter.

          var_dump($data):

          Code:
          array(4) { [1]=> array(3) { ["betID"]=> string(1) "2" ["result"]=> int(1) ["amountNxt"]=> int(3) } [2]=> array(3) { ["betID"]=> string(1) "2" ["result"]=> int(1) ["amountNxt"]=> int(5) } [3]=> array(3) { ["betID"]=> string(1) "1" ["result"]=> int(2) ["amountNxt"]=> int(4) } [4]=> array(3) { ["betID"]=> string(1) "1" ["result"]=> int(2) ["amountNxt"]=> int(2) } }
          mermshaus' Beispielarray funktioniert natürlich.
          ist doch vielleicht nur diese zeile, die nicht zu meinem array paßt:

          PHP-Code:
          list($a$b$c/*skip*/) = explode(','key($item)); 

          Kommentar

          Lädt...
          X