Array darf nicht gelöscht werden - Teil II


tklustig

Erfahrenes Mitglied
#1
Hallo Leute, wie bewerkstellige ich es, dass ein über eine Session implementiertes Array nicht bei jedem neuen Merhodenaufruf gelöscht bzw. geleert wird?
Mit array_push klappt es nicht, da dazu irgendwo eine Initialisierung der Form $var=array(); stattfinden muss, und das löscht das Array bei erneutem Aufruf der Methode. Folgender
Lösungsvorschlag führt wider Erwarten ebenfalls nicht zum Ziel. Das Array wird überschrieben, es ist immer nur ein einzelner Wert abrufbar. count() ist also immer eins. Wie geht es richtig? Geht es überhaupt? Vielleicht mit einer Referenz?
PHP:
       if (!isset($sessionPHP['Attachement']) || !is_array($sessionPHP['Attachement'])) {
                        $sessionPHP['Attachement'] = [];
                    }
                    $sessionPHP['Attachement'][] = $id;
                    if ($id > 5) {
                        var_dump($sessionPHP['Attachement']);
                        die();
                    }
Der vardump zeigt
Code:
array(1) { [0]=> int(10) }
auf, obwohl die Elemente 1,5 und 10 drinn sein müssten
 

tklustig

Erfahrenes Mitglied
#3
Klappt immer noch nicht, zumindest nicht mit folgendem Code
PHP:
              /* if (!isset($_SESSION['Attachement']) || !is_array($_SESSION['Attachement'])) {
                      $_SESSION['Attachement'] = $id;
                      } */
                    $ArrayofAttachements[] = $id;
                    $_SESSION['Attachement'] = $ArrayofAttachements;
                    if ($id > 5) {
                        $name = $_SESSION['Attachement'];
                        print_r("Session<br>");
                        var_dump($name);
                        print_r("<br>Array<br>");
                        var_dump($ArrayofAttachements);
                        die();
                    }
var_dump zeigt folgendes:
Code:
Session
array(1) { [0]=> int(5) }
Array
array(1) { [0]=> int(5) }
Der Wert für das Array ist okay, die Session aber sollte bereits drei Elemente enthalten, da die Methode bereits dreimal aufgerufen wurde!
 

tklustig

Erfahrenes Mitglied
#4
Heureka! So klappt es:
PHP:
                if (!isset($_SESSION['Attachement']) || !is_array($_SESSION['Attachement'])) {
                        $_SESSION['Attachement'] = array();
                    }
                    $ArrayofAttachements[] = $id;
                    $_SESSION['Attachement'][] = $id;
                    if ($id > 5) {
                        $name = $_SESSION['Attachement'];
                        print_r("Session<br>");
                        var_dump($name);
                        print_r("<br>Array<br>");
                        var_dump($ArrayofAttachements);
                        die();
                    }
erzeugt folgende Ausgabe:
Code:
Session
array(4) { [0]=> int(10) [1]=> array(1) { [0]=> int(1) } [2]=> array(1) { [0]=> int(5) } [3]=> array(1) { [0]=> int(10) } }
Array
array(1) { [0]=> int(10) }
Es wäre mir allerdings lieber,ein Array mit allen Werten als ineinander verschachtelte Arrays zu erhalten. Weiß jemand, wie ich das erreichen könnte?
Wenn nicht, geht's hier https://www.tutorials.de/threads/verschachtelte-arrays-loeschen.406655/#post-2104684
weiter...
 
Zuletzt bearbeitet:

Kalito

Erfahrenes Mitglied
#5
naja,
HTML:
$_SESSION['Attachement'][] = $id
Dieser Code sollte eigentlich einen Wert als neues Element zu dem Array hinzufügen. Für mich klingt das so, als ob $id auch ein Array ist.
 

tklustig

Erfahrenes Mitglied
#6
Yuup. Sorry ,hatte vergessen, meine Threads zu aktualisieren. Hier der Code, der mein Problem löst:
PHP:
               if (!isset($_SESSION['Attachement']) || !is_array($_SESSION['Attachement'])) {
                        $_SESSION['Attachement'] = array();
                    }
                    $_SESSION['Attachement'][] = $id;