Riward: internal array pointer + session

Servuz!

Ich möchte ein Array - sagen wir mal: $_SESSION["test"] = array("d","h","a","x"); - Speichern in einer Session und den damit verknüpften Inhalt des Arrays je nach Seitenaufruf anzeigen..

Ich habe also 2 Buttons "Vor" und "Zurück".
Drückt man zB auf Vor, sendet das Script ein "+" an system.php (system.php steuert alle POST und GETs und routet wieder zurück...)

wie kann ich nun erreichen das nicht nur das array selbst gespeichert wird sondern auch die Position? so dass current($_SESSION["test"]) die aktuelle Position ausgibt und prev und next eben vor und zurück ergiebt?

Wie geht das?
Riward

  1. Hi!

    Oehm. Indem Du den Wert auch in der Session speicherst?

    --
    "Die Diebesgilde beklagte sich darueber, dass Mumm in aller Oeffentlichkeit behauptet hatte, hinter den meisten Diebstaehlen steckten Diebe."
          - T. Pratchett
    1. Hello,

      Oehm. Indem Du den Wert auch in der Session speicherst?

      Gefragt war nicht nach dem aktuellen Key des arrays, sondern nach dem aktullen Array-Pointer.
      Und somit ist diese Frage gar nicht uninteressant.

      Denn es gibt weder eine Funktion array_get_pointer() noch eine array_set_pointer().

      Beim serialisieren von Arrays (auch in der Session) wird aber nur die Datenstruktur und nicht die übrigen Daten zum Array gespeichert.

      Man müsste das also im Script emulieren. Für den Pointer die Position mitzählen und nachher, nach dem deserialisieren, auch wieder auf diese Weise einstellen.

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Und somit ist diese Frage gar nicht uninteressant.

        ..Danke :-)

        Denn es gibt weder eine Funktion array_get_pointer() noch eine array_set_pointer().

        Genau..

        Man müsste das also im Script emulieren. Für den Pointer die Position mitzählen und nachher, nach dem deserialisieren, auch wieder auf diese Weise einstellen.

          
        # Set + - Für Pointer (Vorheriger Kunde / Nächster Kunde)  
        $kunden_selektion_ = $_SESSION["kunden_selektion"];  
        foreach($kunden_selektion_ as $_kunde_id){  
        	if ($_kunde_id == $kunde_id) break;  
        	else next($kunden_selektion_);  
        }  
        $kunden_selektion_next = $kunden_selektion_;  
        $kunden_selektion_prev = $kunden_selektion_;  
        $next = next($kunden_selektion_next);  
        $prev = prev($kunden_selektion_prev);  
        
        

        Ist einfach nicht schön, aber es geht..

        Riward

        1. je nach PHP-Version unter umständen auch so:

            
          $kunden_selektion_ = $_SESSION["kunden_selektion"];  
          
          

          ->

            
          foreach($_SESSION["kunden_selektion"] as $_kunde_id){  
          
          

          <-

            
          	if ($_kunde_id == $kunde_id) break;  
          	else next($kunden_selektion_);  
          }  
          $kunden_selektion_next = $kunden_selektion_;  
          $kunden_selektion_prev = $kunden_selektion_;  
          $next = next($kunden_selektion_next);  
          $prev = prev($kunden_selektion_prev);  
          
          

          Was ein komplizierter sch**** .. sry, aber echt war

          Riward

          1. Hello,

            Was ein komplizierter sch**** .. sry, aber echt war

            Ich wollte Dir erstmal Gelegenheit geben, deine eigenen Gedanken zu äußern, bevor ich mit meinen Verschlimmbesserungsvorschlägen komme :-)

            Das Problem ist eigentlich keins, wenn man die Randbedingungen geachtet.

            Die wesentliche Randbedingungen dürfte sein, dass in einem PHP-Array kein Key doppelt vorkommen darf. Ich habe es bisher auch noch nicht geschafft, PHP da auszutricksen. Es lässt dich an die Key- und die Pointer-Verwaltung nicht heran.

            Es ist also möpglich, sich einfach den aktuellen Key zu merken und diesen nach dem Session-Reload (oder Array-reload aus einer Datei -> unserialize) wieder einzustellen, indem man eine foreach-Schleife einfach durchlaufen lässt, bis der gewünschte Key wiedergefunden wurde.

            Der Pointer zeigt dann automatisch wieder auf das passende Element.

            Spannend wird das nur bei verschachtelten Datenstrukturen, also bei "mehrdimensionalen" Arrays, denn da kann der Key auch in mehreren Zweigen auftreten. Den absoluten Pfad zum Element gibt es aber garantiert auch nur einmal.

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
  2. Hi,

    wie kann ich nun erreichen das nicht nur das array selbst gespeichert wird sondern auch die Position? so dass current($_SESSION["test"]) die aktuelle Position ausgibt und prev und next eben vor und zurück ergiebt?

    Warum du überhaupt mit current, prev und next arbeiten willst bei einem numerisch indizierten Array, leuchtet mir spontan nicht ein.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]