Gå til innhold

Fjerne deler av en array?


Anbefalte innlegg

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
Videoannonse
Annonse

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

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 av Sk!ppy
Lenke til kommentar
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

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 av Sk!ppy
Lenke til kommentar

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

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

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 av Jonas
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...