webForumDet fria alternativet

$_SESSION baklänges

12 svar · 628 visningar · startad av Web-Tor

Web-TorMedlem sedan nov. 200013 890 inlägg
#1

Jag har den här koden för att skriva ut innehållet i en kundvagn:

if(count($_SESSION['cart']) > 0){
	foreach($_SESSION['cart'] as $item => $p){
		echo $_SESSION['cart'][$item]['name'];
		echo "<br>";
	}
}else{
	echo 'Kundvagnen är tom';
}

Hur gör man för att få ut innehållet i omvänd ordning?

MeleaMedlem sedan juli 20033 147 inlägg
#2
if(count($_SESSION['cart']) > 0){
    arsort($_SESSION['cart']);
    foreach($_SESSION['cart'] as $item => $p) {
        echo $_SESSION['cart'][$item]['name'];
        echo "<br>";
    }
}else{
    echo 'Kundvagnen är tom';
}
SPiNMedlem sedan mars 20007 896 inlägg
#3

Med Meleas kod sorterar du den, med högsta värdet först. Om du vill skriva ut innehållet i omvänd ordning sen värdena stoppades in, får du använda en for-slinga:

for ($i = sizeof($_SESSION['cart']); $i > 0; --$i) {
    echo ...
Web-TorMedlem sedan nov. 200013 890 inlägg
#4

SPiN skrev:

m du vill skriva ut innehållet i omvänd ordning sen värdena stoppades in, får du använda en for-slinga:

Ja, det är precis detta jag vill göra. Hur skall jag få ut något värde ut sessionen?

Det här funkar ju inte länge:

echo $_SESSION['cart'][$item]['name']
SPiNMedlem sedan mars 20007 896 inlägg
#5
for ($i = sizeof($_SESSION['cart']); $i >= 0; --$i) {
    echo $_SESSION['cart'][$i]['name'];
}
Web-TorMedlem sedan nov. 200013 890 inlägg
#6

Det var det första jag testade men det ger:

PHP Notice:  Undefined offset:  1
MeleaMedlem sedan juli 20033 147 inlägg
#7
if(count($_SESSION['cart']) > 0){
    $_SESSION['cart'] = array_reverse($_SESSION['cart'], true);
    foreach($_SESSION['cart'] as $item => $p){
        echo $_SESSION['cart'][$item]['name'];
        echo "<br>";
    }
} else {
    echo 'Kundvagnen är tom';
}

/r
Ska vara array_reverse($_SESSION['cart'], true);

SPiNMedlem sedan mars 20007 896 inlägg
#8

Jag ändrade i koden ovanför, den ska ju räkna till $i >= 0 - så att du får med den första posten också.

Ditt felmeddelande tyder däremot på att din array inte har en obruten rad av indexerade element (0, 1, 2, 3 ... n) - det saknas något element någonstans? (0, 1, 3, ... n)?

Hur stoppar du in och tar bort värden ur kundkorgen? Se till att bevara index-positionerna så ska det inte vara några problem.

Web-TorMedlem sedan nov. 200013 890 inlägg
#9

array_reverse gillar jag! :)

Enda problemet med din kod är att den sorterar om sessionen varje gång. Men det går ju att lösa genom att använda en lokal variabel.

Tack så mycket!

Web-TorMedlem sedan nov. 200013 890 inlägg
#10

Jag kom precis på ett problem. Låt säga att man lägger till följande varor i sin korg.
- Apa
- Bil
- Cykel

Men array_reverse visas kundvagnen så här:
- Cykel 1 st.
- Bil 1 st.
- Apa 1 st.

Allt är frid och fröjd ända tills man lägger till ytterligare en Apa. Då skulle jag vilja att kundvagnen visar sig så här:
- Apa 2 st.
- Cykel 1 st.
- Bil 1 st.

Borde man inte kunna fixa detta genom att lagra en timestamp tillsammans med varje vara och sedan sortera på denna?

Så min fråga är: hur sorterar jag på $_SESSION['cart']['time']?

SPiNMedlem sedan mars 20007 896 inlägg
#11

Taskigt minne? ;)

Web-TorMedlem sedan nov. 200013 890 inlägg
#12

SPiN skrev:

Taskigt minne? ;)

Hehe :e
usort() kommer jag allt ihåg men hur kommer jag överhuvudtaget åt ett värdena inne i sessionen ("time" i detta fall)?

Min session ser ut så här:

cart|a:3:{
	i:1;a:3:{
	s:8:"quantity";i:1;s:2:"id";s:1:"1";s:4:"time";i:1232220492;
	}

	i:2;a:3:{
	s:8:"quantity";i:1;s:2:"id";s:1:"2";s:4:"time";i:1232220494;
	}

	i:3;a:3:{
	s:8:"quantity";i:1;s:2:"id";s:1:"3";s:4:"time";i:1232220495;
	}
}
Web-TorMedlem sedan nov. 200013 890 inlägg
#13

Shit! Det här funkar ju! :)

function __compare__values($x, $y) {
     return strcmp($y['time'],$x['time']);
}

$temp = $_SESSION['cart'];
usort($temp, "__compare__values");

Nu hoppas jag att jag skall vara klar med den här biten. Tack allihopa för hjälpen!

134 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)