webForumDet fria alternativet

$_SESSION baklänges

PHP

12 svar · 628 visningar · startad av Web-Tor

Medlem sedan nov. 200013 890 inlägg
Frågan#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?

Medlem 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';
}
Medlem 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 ...
Medlem 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']
Medlem sedan mars 20007 896 inlägg
#5
for ($i = sizeof($_SESSION['cart']); $i >= 0; --$i) {
    echo $_SESSION['cart'][$i]['name'];
}
Medlem sedan nov. 200013 890 inlägg
#6

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

PHP Notice:  Undefined offset:  1
Medlem 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);

Medlem 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.

Medlem 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!

Medlem 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']?

Medlem sedan mars 20007 896 inlägg
#11

Taskigt minne? ;)

Medlem 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;
	}
}
Medlem 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!

247 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)