Avatar billede causasui Nybegynder
23. februar 2007 - 19:40 Der er 10 kommentarer og
1 løsning

Slette i array

Hej, jeg er igang med at lave en inkøbskurv opbygget omkring session array, er her stødt på et problem kan simpelthen ikke hitte ud af hvordan jeg sletter i et multidimensionelt array.
Nedenstående kode opretter et array, hvis jeg nu vil slette den række jeg har indsat hvordan gøres dette så ?

session_start();
$basket = array();
$_SESSION['basket'] = $basket;

                                   
                $items = array(
                'id' => '2',
                'price' => '150',
                'quantity' => '4');
                array_push($_SESSION['basket'], $items);
                print_r($_SESSION['basket']);

?>
Avatar billede coderdk Praktikant
23. februar 2007 - 20:01 #1
Har du prøvet array_pop? Eller unset()? Hvis du bruger PHP4 skal du muligvis klippe i arrayet med et par array_slice og en array_merge :)
Avatar billede causasui Nybegynder
23. februar 2007 - 20:33 #2
Jeg kan se at array_pop napper den sidste element, men jeg vil gerne bestemme hvilken element den skal slette,
f.eks hvis brugeren klikker på slet varer i sin indkøbskurv og denne vare har f.eks  key værdi 4, så skal den slettes i array.
Array ( [4] => Array ( [id] => 2 [price] => 150 [quantity] => 4 ) )
Avatar billede causasui Nybegynder
23. februar 2007 - 20:34 #3
nb: kører på version PHP Version 5.0.4
Avatar billede causasui Nybegynder
23. februar 2007 - 20:52 #4
Det virker med:
unset($_SESSION['basket']['4']);
Kunne du så fortælle mig hvordan jeg får "rystet" mit array på plads igen sådan at mine keys bliver fortløbende, ellers for jeg sikkert problemer når jeg skal udskrive mit array i en løkke etc.
Array ( [0] => Array ( [id] => 2 [price] => 150 [quantity] => 4 ) )
Array ( [1] => Array ( [id] => 2 [price] => 150 [quantity] => 4 ) )
Array ( [2] => Array ( [id] => 2 [price] => 150 [quantity] => 4 ) )
Array ( [3] => Array ( [id] => 2 [price] => 150 [quantity] => 4 ) )
Array ( [5] => Array ( [id] => 2 [price] => 150 [quantity] => 4 ) )
Array ( [6] => Array ( [id] => 2 [price] => 150 [quantity] => 4 ) )
Avatar billede coderdk Praktikant
23. februar 2007 - 22:15 #5
Ikke nødvendigvis :) Du kan evt. bruge:

foreach ( $_SESSION['basket'] as $item )
{
  echo $item['id'] . " " . $item['price'];
}

Men ellers er kan du fixe det med en foreach...
Avatar billede schaefner Juniormester
24. februar 2007 - 01:39 #6
Nulstil array:

$_SESSION['basket'] = array_values($_SESSION['basket']);

http://dk2.php.net/array_values
Avatar billede coderdk Praktikant
24. februar 2007 - 02:01 #7
Gah! Selvfølgelig :)
Avatar billede causasui Nybegynder
24. februar 2007 - 10:56 #8
Super gode svar, må jeg være fræk at spørge om en sidste ting for så tror jeg endelig jeg kan komme videre i teksten, (synes multiarrays er komplicerede)..
Hvis bruger vælger at ændre antal af varer eks. quantity = 44 hvordan ændrer jeg denne værdi, er det nemmest bare at slette den gamle record og oprette en ny måske?
Array ( [0] => Array ( [id] => 2 [price] => 150 [quantity] => 4 ) ) skal blive til ->
Array ( [0] => Array ( [id] => 2 [price] => 150 [quantity] => 44 ) )
Avatar billede coderdk Praktikant
24. februar 2007 - 12:13 #9
Jeg ville bruge dit ID som array-key i din basket, så ville du bare kunne tilføje sådan:

if ( array_key_exists( $id, $_SESSION['basket'] ) )
{
  $_SESSION['basket'][$id]['quantity']++;
}
else
{
  $_SESSION['basket'][$id]['quantity'] = 1;
  $_SESSION['basket'][$id]['price'] = $prisen;
}
Avatar billede coderdk Praktikant
24. februar 2007 - 12:13 #10
Hmm for at være flink ville jeg ændre:

if ( array_key_exists( $id, $_SESSION['basket'] ) )
{
  $_SESSION['basket'][$id]['quantity']++;
}
else
{
  $_SESSION['basket'][$id] = array( 'quantity' => 1, 'price' => $prisen );
}
Avatar billede causasui Nybegynder
24. februar 2007 - 13:13 #11
Mange tak, nu har jeg fået rigeligt at arbejde med, super..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester