Sk!ppy Skrevet 5. mai 2011 Del Skrevet 5. mai 2011 Hei, Jeg har laget en array som skal fungere som handleliste på nettbutikken min. <?php foreach ($_SESSION['cart'] as $arr) { $pr = mysql_query("SELECT * FROM `products` WHERE `id`='".$arr['id']."'"); $pr = mysql_fetch_array($pr); echo "<li> ".number_format($arr['price'])." kr - ".substr($pr['title'], 0, 16)."</li>"; $items++; $price = $price + $arr['price']; } echo '<hr> '.number_format($price).' kr - '.$items.' produkter'; ?> Arrayen ser slik ut: http://pastebin.com/bL4Ux6DC Det jeg da lurer på er når jeg skal fjerne et item fra lista, hvordan gjør jeg egentlig det? Lenke til kommentar
torbjørn marø Skrevet 5. mai 2011 Del Skrevet 5. mai 2011 unset()! Du kan lese mer om arrays her, med flere eksempler på sletting av elementer. Lenke til kommentar
Sk!ppy Skrevet 5. mai 2011 Forfatter Del Skrevet 5. mai 2011 Hvordan vet jeg hvilken jeg skal fjerne da? Da fjerner jeg jo hele handlelista, ikke bare en enkelt vare? Lenke til kommentar
Thomas. Skrevet 6. mai 2011 Del Skrevet 6. mai 2011 Hvordan vet jeg hvilken jeg skal fjerne da? Da fjerner jeg jo hele handlelista, ikke bare en enkelt vare? Hver id er vel unik, så da kan du gjøre det slik: (bare med $_GET, f.eks ?fjernvare=2) <?php $array = array(array('id' => 'vare1'), array('id' => 'vare2')); /** fjerner array med vare 1 **/ unset($array[array_search('vare1', $array)]); var_dump($array); ?> Lenke til kommentar
Sk!ppy Skrevet 6. mai 2011 Forfatter Del Skrevet 6. mai 2011 (endret) Det ser riktig ut for min del, og jeg forstår ikke hva som er galt nå? Kan det være at jeg har flere items med lik id? I mitt hode burde jo da alle items med lik id fjernes bare, og de andre bli igjen? unset($_SESSION['cart'][array_search($_GET['remove'], $_SESSION['cart'])]); Endret 6. mai 2011 av Sk!ppy Lenke til kommentar
Jonas Skrevet 6. mai 2011 Del Skrevet 6. mai 2011 Det ser riktig ut for min del, og jeg forstår ikke hva som er galt nå? Det fungerer ikke, fordi du har tatt utgangspunkt i en kode som ikke heller fungerer. Les dokumentasjonen nøye, så ser du kanskje hvorfor kodesnutten Thomas postet ikke oppfører seg slik tenkt. Hint: Sjekk resultatet av følgende kode. <?php $array = array(array('id' => 'vare1'), array('id' => 'vare2')); var_dump(array_search('vare1', $array)); ?> Lenke til kommentar
Sk!ppy Skrevet 6. mai 2011 Forfatter Del Skrevet 6. mai 2011 (endret) Jeg fant feilen på eksempelet til Thomas, men får det ikke til på min. Men nå får jeg ivertfall ut noe, problemet er at jeg får den samme, uavhengig av hvilken av varene jeg prøver å slette :S var_dump($_SESSION['cart'][array_search($_GET['remove'], $_SESSION['cart'])]); Resultat av koden over: array(2) { ["id"]=> string(1) "2" ["price"]=> string(3) "199" } Dump av _SESSION['cart'] array(2) { [0]=> array(2) { ["id"]=> string(1) "2" ["price"]=> string(3) "199" } [1]=> array(2) { ["id"]=> string(1) "1" ["price"]=> string(3) "299" } } Endret 6. mai 2011 av Sk!ppy Lenke til kommentar
Jonas Skrevet 6. mai 2011 Del Skrevet 6. mai 2011 Jeg tror egentlig ikke du har funnet feilen jeg tenkte på. Som sagt, les dokumentasjonen nøye. Du forsøker å søke etter en ID i et array som inneholder arrays. Da får du naturligvis ikke noe treff og funksjonen returnerer false. Siden PHP er typesvakt, så er det ingen ting i veien for å referere til et element i et array med en bolsk verdi, du oppnår bare sannsynligvis ikke det du vil. Lenke til kommentar
Sk!ppy Skrevet 6. mai 2011 Forfatter Del Skrevet 6. mai 2011 Nå falt jeg litt ut? Lenke til kommentar
Thomas. Skrevet 6. mai 2011 Del Skrevet 6. mai 2011 Laget en ny versjon. Denne fungerer. ?f=17 (ok, funnet i array 0) ?f=52 (ok, funnet i array 1) ?f=23 (ok, funnet i array 2) <?php session_start(); #session_destroy(); #if(!isset($_SESSION['varer'])) { /* $_SESSION['varer'] = array( array('id' => '17', 'price' => '1000'), array('id' => '52', 'price' => '2000'), array('id' => '23', 'price' => '3000'), );*/ #} $z = array_merge($_SESSION['varer']); foreach($z as $c => $v) { if(array_search(@$_GET['f'], $z[$c]) !== false) { echo 'ok, funnet i array ' . $c . '<br>'; } } ?> Lenke til kommentar
Sk!ppy Skrevet 6. mai 2011 Forfatter Del Skrevet 6. mai 2011 Da fikk jeg det endelig til! Tusen takk $z = array_merge($_SESSION['cart']); foreach($z as $c => $v) { if(array_search(@$_GET['remove'], $z[$c]) !== false) { unset($_SESSION['cart'][$c]); } } Lenke til kommentar
Jonas Skrevet 6. mai 2011 Del Skrevet 6. mai 2011 (endret) Bruken av array_merge og array_search er i dette tilfelle helt unødvendig, og kan faktisk skape veldig uforutsigbar oppførsel. Det skader heller ikke å skrive litt mer beskrivende variabelnavn. <?php foreach($_SESSION['cart'] as $key => $item) { if($item['id'] == $_GET['remove']) { unset($_SESSION['cart'][$key]); break; } } ?> Endret 6. mai 2011 av Jonas Lenke til kommentar
Sk!ppy Skrevet 6. mai 2011 Forfatter Del Skrevet 6. mai 2011 Litt mer beskrivende variabelnavn kunne vel strengt talt ikke skadet nei Takk for tips til forbedring Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå