internal array pointer + session
Riward
- php
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
Hi!
Oehm. Indem Du den Wert auch in der Session speicherst?
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
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
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
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
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