Ankündigung

Einklappen
Keine Ankündigung bisher.

Array anhand gleichen values "verschmelzen"

Einklappen

Neue Werbung 2019

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

  • Array anhand gleichen values "verschmelzen"

    Hallo,

    wie bekome ich aus
    PHP-Code:
    array(23) {
      [
    0]=>
      array(
    2) {
        [
    "monat"]=>
        
    string(7"2012-02"
        
    ["Produkt 1"]=>
        
    int(1)
      }
      [
    1]=>
      array(
    2) {
        [
    "monat"]=>
        
    string(7"2012-02"
        
    ["Produkt 2"]=>
        
    int(24)
      }
      [
    2]=>
      array(
    2) {
        [
    "monat"]=>
        
    string(7"2012-02"
        
    ["Produkt 3"]=>
        
    int(8)
      }

    folgendes array "gezaubert"
    PHP-Code:
    array(23) {
      [
    0]=>
      array(
    4) {
        [
    "monat"]=>
        
    string(7"2012-02"
        
    ["Produkt 1"]=>
        
    int(1)
        [
    "Produkt 2"]=>
        
    int(24)
        [
    "Produkt 3"]=>
        
    int(8)
      }

    (also gleiche YYYY-MM values sollen "vereint" werden)

    Danke!

  • #2
    PHP-Code:
    $inbound = [
        [
            
    'monat' => '2012-02',
            
    'Produkt 1' => 1,
        ],
        [
            
    'monat' => '2012-02',
            
    'Produkt 2' => 24,
        ],
        [
            
    'monat' => '2012-02',
            
    'Produkt 3' => 8,
        ]
    ];

    $fused = [ call_user_func_array('array_merge'$inbound) ];

    var_dump($fused); 
    Code:
    array(1) {
      [0]=>
      array(4) {
        ["monat"]=>
        string(7) "2012-02"
        ["Produkt 1"]=>
        int(1)
        ["Produkt 2"]=>
        int(24)
        ["Produkt 3"]=>
        int(8)
      }
    }
    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

    Kommentar


    • #3
      Beispiel dumm gewählt würde ich sagen.

      wenn dies
      Zitat von Heart Beitrag anzeigen
      (also gleiche YYYY-MM values sollen "vereint" werden)
      als Forderung steht, dann sollte das Beispiel dies auch widerspiegeln (Also nicht alles Elemente mit dem selben Datumsstempel enthalten).

      Am Rande:
      Ihr findet bei Problemen mit Arrays schneller Helfer, wenn ihr eure
      Beispielarrays nicht mit print_r oder var_dump ausgebt und postet,
      sondern mit

      PHP-Code:
      echo '<pre>'.var_export($array,true).'</pre>'
      Dieses Ausgabeformat kann per Copy & Paste schnell und einfach in PHP-Scripte übernommen werden.

      Kommentar


      • #4
        Danke Euch... nochmal ein Beispiel mit var_export Ausgabe

        PHP-Code:
        array (
          
        => 
          array (
            
        'monat' => '2014-04',
            
        'Produkt 1' => 1,
          ),
          
        => 
          array (
            
        'monat' => '2014-04',
            
        'Produkt 2' => 17,
          ),
          
        => 
          array (
            
        'monat' => '2014-05',
            
        'Produkt 2' => 23,
          ),
          
        => 
          array (
            
        'monat' => '2014-05',
            
        'Produkt 1' => 4,
          ),

        @tr0y Danke, aber wie komme ich zu dem von dir gezeigten Format der Ausgabe deiner $inbound Variable?

        P.S.: Was habe ich eigentlich verbrochen, dass ich unter meinem Nick ein rotes Viereck habe und an meinem Verhalten arbeiten soll?

        Kommentar


        • #5
          P.S.: Was habe ich eigentlich verbrochen, dass ich unter meinem Nick ein rotes Viereck habe und an meinem Verhalten arbeiten soll?
          Im Kontrollzentrum kannst du sehen, bei welchem Beitrag du von einem User negativ bewertet wurdest. vielleicht klärt sich das dann auf?!

          @tr0y Danke, aber wie komme ich zu dem von dir gezeigten Format der Ausgabe deiner $inbound Variable?
          Ähm..denk mal nach.

          mfg Wolf29
          while (!asleep()) sheep++;

          Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

          Kommentar


          • #6
            Wie oben angemerkt - Tr0ys Code löst nur ein Teilproblem, sicher nicht das was Du letztlich erzielst. Wie immer die Frage: Woher kommt das Datenformat?
            [COLOR="#F5F5FF"]--[/COLOR]
            [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
            [COLOR="#F5F5FF"]
            --[/COLOR]

            Kommentar


            • #7
              Zitat von wolf29 Beitrag anzeigen
              Im Kontrollzentrum kannst du sehen, bei welchem Beitrag du von einem User negativ bewertet wurdest. vielleicht klärt sich das dann auf?!
              Ok, Thread dazu gefunden, aber nichts verwerfliches darin finden können
              Zitat von wolf29 Beitrag anzeigen
              Ähm..denk mal nach.
              json_encode auf das array?! Aber dann erhalte ich auch eine andere Ausgabe... steh wohl auf dem Schlauch, sorry

              Kommentar


              • #8
                Es handelt sich um eine moderne Form der Array-Notierung. Ende des Ratespiels
                [COLOR="#F5F5FF"]--[/COLOR]
                [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                [COLOR="#F5F5FF"]
                --[/COLOR]

                Kommentar


                • #9
                  Zitat von nikosch Beitrag anzeigen
                  Wie oben angemerkt - Tr0ys Code löst nur ein Teilproblem, sicher nicht das was Du letztlich erzielst. Wie immer die Frage: Woher kommt das Datenformat?
                  Aus einer sqlite Datenbank.

                  Code:
                  SELECT Strftime("%y-%m", pa.datum) AS monat,
                         Count()                     AS ausgaben_im_monat,
                         p.produktname
                  FROM   produktausgaben pa
                         JOIN produkte p
                           ON pa.produkt_id = p.id
                  GROUP  BY p.id,
                            Strftime("%y-%m", pa.datum)
                  ORDER  BY monat
                  PHP-Code:
                  $i 0;
                  while (
                  $res $results_area->fetchArray()) {
                      
                  $row[$res['monat']][$res['produktname']] = $res['ausgaben_im_monat'];
                      
                  $i++;

                  Kommentar


                  • #10
                    Wie oben angemerkt - Tr0ys Code löst nur ein Teilproblem, sicher nicht das was Du letztlich erzielst. Wie immer die Frage: Woher kommt das Datenformat?
                    ++
                    und macht es nicht mehr Sinn,falls es nicht bessere Lösungen gibt, wie z.B. dies über SQL zu lösen, eine solches Resultat zu erzeugen?
                    PHP-Code:
                    array (
                      
                    '2014-04' => 
                      array (
                        
                    => 
                        array (
                          
                    'monat' => "2014-04",
                          
                    'Produkt 1' => 1,
                        ),
                        
                    => 
                        array (
                          
                    'monat' => "2014-04",
                          
                    'Produkt 2' => 17,
                        ),
                      ),
                      
                    '2014-05' => 
                      array (
                        
                    => 
                        array (
                          
                    'monat' => "2014-05",
                          
                    'Produkt 2' => 23,
                        ),
                        
                    => 
                        array (
                          
                    'monat' => "2014-05",
                          
                    'Produkt 1' => 4,
                        ),
                      ),

                    Edit: wir haben es geahnt, Daten kommen aus einer DB

                    Kommentar


                    • #11
                      @jspit Das eigentliche Problem ist ja dann weiterhin das gleiche... am Ende soll ja folgendes dabei herauskommen
                      PHP-Code:
                      array(1) {
                        [
                      0]=>
                        array(
                      4) {
                          [
                      "monat"]=>
                          
                      string(7"2012-02"
                          
                      ["Produkt 1"]=>
                          
                      int(1)
                          [
                      "Produkt 2"]=>
                          
                      int(24)
                          [
                      "Produkt 3"]=>
                          
                      int(8)
                        }

                      Mit folgendem komme ich ans Ziel (aber wahrscheinlich kann man das viel eleganter lösen)
                      PHP-Code:
                      $i 0;
                      $array_new = array();
                      foreach (
                      $row as $datum => $produkte) {
                          
                      $array_new[$i] = array ( "period" => $datum );

                          foreach (
                      $produkte as $key => $value) {
                            
                      $array_new[$i][$key] = $value;
                          }

                          
                      $i++;

                      Ausgabe:
                      PHP-Code:
                      array (
                        
                      => 
                        array (
                          
                      'period' => '2014-01',
                          
                      'produkt 1' => 3,
                          
                      'produkt 2' => 36,
                        ),
                      usw.

                      Kommentar


                      • #12
                        Bei meiner obigen Antwort hing ich ein paar Beträge hinterher...

                        Zitat von Heart Beitrag anzeigen
                        Ausgabe:
                        PHP-Code:
                        array (
                          
                        => 
                          array (
                            
                        'period' => '2014-01',
                            
                        'produkt 1' => 3,
                            
                        'produkt 1' => 36,
                          ),
                        usw.

                        Ein array mit mehreren identischen Schlüsseln 'produkt 1', wie hast du das geschafft

                        Kommentar


                        • #13
                          Sorry... Tippfehler, habs berichtigt.

                          Kommentar


                          • #14
                            Durch dein $i erzeugt dein obiger Code im resultat zwagsläufig genau so viele Einträge wie im Inputarray. Du hast dort auch noch Tippfehler oder irgend was anderes stimmt nicht. Eine Ausgabe wie oben gezeigt erhältst du mit dem gezeigten Code nicht.

                            Kommentar


                            • #15
                              Wieso ist Monat auf der gleichen Ebene wie Produkte? Irgendwie macht es das alles nur noch mühsamer, oder ich versteh was falsch
                              Neu bei PHP, lerne aktuell OOP

                              Kommentar

                              Lädt...
                              X