Nachrichten gebündelt ausgeben


tklustig

Erfahrenes Mitglied
Hallo Leute,
PHP:
 var_dump($session->getAllFlashes());
liefert folgendes:
Code:
array(1) { ["info"]=> array(17) { [0]=> string(127) "Die Datei 712_18411316511045670337_DeStatis_WZ2008.xls.xls wurde in den Ordner /Mailanhaenge_IN/.. hochgeladen" [1]=> string(128) "Die Datei 782_1411097758363262439_Code_muehleXAML.docx.docx wurde in den Ordner /Mailanhaenge_IN/.. hochgeladen" [2]=> string(117) "Die Datei 816_19672866441970811308_Skin4.jpg.jpg wurde in den Ordner /Mailanhaenge_IN/.. hochgeladen" [3]=> string(125) "Die Datei 816_2827956161903970160_cpp_mta_rwthaa.pdf.pdf wurde in den Ordner /Mailanhaenge_IN/.. hochgeladen" [4]=> string(116) "Die Datei 817_1009094543214923500_Punk4.jpg.jpg wurde in den Ordner /Mailanhaenge_IN/.. hochgeladen" [5]=> string(117) "Die Datei 817_15744216571135223420_Punk3.jpg.jpg wurde in den Ordner /Mailanhaenge_IN/.. hochgeladen" [6]=> string(114) "Die Datei 817_970388427258610780_b012.pdf.pdf wurde in den Ordner /Mailanhaenge_IN/.. hochgeladen" [7]=> string(115) "Die Datei 819_401232184313689120_Punk2.jpg.jpg wurde in den Ordner /Mailanhaenge_IN/.. hochgeladen" [8]=> string(115) "Die Datei 819_660632656325322555_Punk1.jpg.jpg wurde in den Ordner /Mailanhaenge_IN/.. hochgeladen" [9]=> string(160) "Die Datei 828_6443535311053583282_How_to_Reset_Lost_Windows_7_Password_with_Hiren.docx.docx wurde in den Ordner /Mailanhaenge_IN/.. hochgeladen" [10]=> string(128) "Die Datei 829_1125527045854389423_Code_muehleXAML.docx.docx wurde in den Ordner /Mailanhaenge_IN/.. hochgeladen" [11]=> string(146) "Die Datei 829_1339069809930073886_Projektdokumentation_Oynak_thomas.docx.docx wurde in den Ordner /Mailanhaenge_IN/.. hochgeladen" [12]=> string(130) "Die Datei 829_1536152378691479666_MySQLProgrammierung.pdf.pdf wurde in den Ordner /Mailanhaenge_IN/.. hochgeladen" [13]=> string(119) "Die Datei 842_1043338064305667001_image010.png.png wurde in den Ordner /Mailanhaenge_IN/.. hochgeladen" [14]=> string(118) "Die Datei 843_453601840160204004_image010.png.png wurde in den Ordner /Mailanhaenge_IN/.. hochgeladen" [15]=> string(119) "Die Datei 844_1250761159149391139_image011.png.png wurde in den Ordner /Mailanhaenge_IN/.. hochgeladen" [16]=> string(119) "Die Datei 844_7321035901399951987_image010.png.png wurde in den Ordner /Mailanhaenge_IN/.. hochgeladen" } }
Folgender Code gibt obige Arrayelemente alle in einer seperaten Messagebox aus. Das ist jedoch nicht meine Intention. Meine Intention ist es, ab einer bestimmten Anzahl die Elemente gebündelt, also in einer einzigen Messagebox darzustellen. Wie mache ich das am besten?
PHP:
foreach ($session->getAllFlashes() as $flash) {
    foreach ($flash as $ausgabe) {
        echo Alert::widget([
            'type' => $MessageArt,
            'title' => 'Information',
            'icon' => 'glyphicon glyphicon-exclamation-sign',
            'body' => $ausgabe,
            'showSeparator' => true,
        ]);
    }
}
Dies ist mein Ansatz. Leider weiß ich nicht weiter. Ich muss das echo außerhalb der Schleife platzieren, kann dann jedoch nicht mehr auf den Inhalt des Arrays zugreifen. Ich könnte die Elemente in ein anderes Array verfrachten. Das löst allerdings nicht mein Problem...
PHP:
   foreach ($session->getAllFlashes() as $flash) {
            if(count($flash)>5){
                //wie geht's hier weiter??
            }else{
            //edit
            foreach ($flash as $ausgabe) {
             echo Alert::widget([
            'type' => $MessageArt,
            'title' => 'Information',
            'icon' => 'glyphicon glyphicon-exclamation-sign',
            'body' => $ausgabe,
            'showSeparator' => true,
        ]);
            }

}
 
Zuletzt bearbeitet:

merzi86

Erfahrenes Mitglied
Hallo tklustig

1. In deinen Ansatz fehlt aber die 2. Schleife im Else Zweig
2. in deinen Beispiel ist nur 1 Element, was unter $flash aufgerufen werden kann. Innerhalb dieses werden die Einträge aufgeführt. Kann im Array der ersten Ebene schon mehrere Elemente liegen?

Wenn nein dann könnte das schon das Ergebnis liefern.

PHP:
function generateOutput( $type, $content ) {
   return Alert::widget([ 'type' => $type,
                          'title' => 'Information',
                          'icon' => 'glyphicon glyphicon-exclamation-sign',
                          'body' => $content,
                          'showSeparator' => true,
        ]);
}

foreach ($session->getAllFlashes() as $flash) {
    if( count( $flash ) > 5 ) {
        echo generateOutput( $MessageArt,
                             implode( "<br /><hr /><br />", $flash );
    } else {
        foreach ($flash as $ausgabe) {
            echo generateOutput( $MessageArt, $ausgabe );
        }
    }
}
Ich habe es nicht getestet, aber es müsste so funktionieren.
 

tklustig

Erfahrenes Mitglied
Tricky! Echt tricky, vorausgesetzt man kennt die PHP-Funktion implode(). Ich kannte bisher nur explode(). Das ist überhaupt mein Problem: Mangelnde Kenntnisse der verfügbaren PHP-Funktionen. Die manuals helfen zwar weiter, allerdings sollte man den Funktionsrumpf bereits wissen. Danke für Deine excellente Lösung!
Außer einem Pushen des 'Gefällt mir'-Buttons weiß ich leider nicht, wie ich Deine Hilfe gebührend honorieren könnte:confused: Wenn es eine Alternative zu diesem Button gibt, lass es mich bitte wissen...
Dieser Thread kann als erfolgreich gelöst geschlossen werden!
 

merzi86

Erfahrenes Mitglied
Ja als Einsteiger ist es manchmal sehr Komplex, ich habe vieles damals über Reverse Engineering mir beigebracht.

Sehr Hilfreich sind im PHP Manual die Übersicht Seiten über die verschiedenen Funktionen z.B.
http://php.net/manual/de/ref.strings.php (zu finden z.B. über Google und den Suchbegriffen "php string funktionen")
http://php.net/manual/de/ref.mbstring.php (das sind Multibyte sichere String-Funktionen am besten sehr viel Nutzen ;) )
http://php.net/manual/de/ref.array.php (zu finden z.B. über Google und den Suchbegriffen "php array funktionen")

Das funktioniert auch für andere Bereiche z.B. DateTime usw.