Avatar billede wetdog Nybegynder
17. januar 2005 - 08:59 Der er 5 kommentarer og
1 løsning

Fjerne element fra multidimensionalt array

Hej

Jeg har tidligere forsøgt at få hjælp til dette (se http://www.eksperten.dk/spm/581229) men det er ikke lykkedes mig endnu - forsøger denne sidste gang.

Hvorfor virker denne funktion ikke :

function slet_vare($index) {

    global $kurv;

    $kurv["pris_ddk_total"] -= $kurv[$index]["varevaerdi_ddk"];
    $kurv["pris_euro_total"] -= $kurv[$index]["varevaerdi_euro"];
    $kurv["antal_total"]--;

    unset($kurv[$index]);
    $hm = array_pop($kurv);
    unset($hm);
  }

der er 3 elementer i array´et og jeg vil gerne fjerne det midterste.

arrayet dannes således :

$kurv[] = array("antal" => $minbest,
"varevaerdi_ddk" => $row[4]*$minbest,
"varevaerdi_euro" =>$row[5]*$minbest,
"varenr" => $row[0],
"tekst_dk" => $row[1],
"tekst_gb" => $row[2],
"tekst_de" => $row[3],
"pris_ddk" => $row[4],
"pris_euro" => $row[5]);

Jeg har forsøgt med array_splice();

/WetDog
Avatar billede bojo Nybegynder
17. januar 2005 - 09:29 #1
Det er jo ikke liige til at vide hvad du mener funktionen skal gøre, men den gør det den "bør".

du sletter et array i arrayet og opretter i stedet 2 nye index og trækker 1 fra et der ikke er der.

den ændrede kode, giver nedenstående resultat:

<?
function slet_vare($index) {

    global $kurv;

    $kurv["pris_ddk_total"] -= $kurv[$index]["varevaerdi_ddk"]; // opret nyt index
    $kurv["pris_euro_total"] -= $kurv[$index]["varevaerdi_euro"]; //opret nyt index
    $kurv["antal_total"]--;  // findes ikke, så hvorfor trække fra??

    unset($kurv[$index]); // slet et array i $kurv
    $hm = array_pop($kurv); // slet $kurv["antal_total"] 
    unset($hm);
  }


$kurv[] = array("antal" => 9,
"varevaerdi_ddk" => 8,
"varevaerdi_euro" =>7,
"varenr" => 1,
"tekst_dk" => 2,
"tekst_gb" => 3,
"tekst_de" => 4,
"pris_ddk" => 5,
"pris_euro" => 6);

echo "<p />Før slet_vare: <br />";
var_dump($kurv);
slet_vare(0);
echo "<p />Efter slet_vare: <br />";
var_dump($kurv);
?>

Før slet_vare:
array(1) { [0]=> array(9) { ["antal"]=> int(9) ["varevaerdi_ddk"]=> int(8) ["varevaerdi_euro"]=> int(7) ["varenr"]=> int(1) ["tekst_dk"]=> int(2) ["tekst_gb"]=> int(3) ["tekst_de"]=> int(4) ["pris_ddk"]=> int(5) ["pris_euro"]=> int(6) } }

Efter slet_vare: :
array(2) { ["pris_ddk_total"]=> int(-8) ["pris_euro_total"]=> int(-7) }
Avatar billede wetdog Nybegynder
17. januar 2005 - 10:39 #2
som man sikkert kan se i koden er dette en indkøbskurv med fx 3 varelinier. Jeg vil gerne have slettet 1 af dem. Kan man det på en nem måde ?
Avatar billede bojo Nybegynder
17. januar 2005 - 11:21 #3
Det gør din kode allerede. Hvis du har vare 1 til 10 og vil slette nr. 5 gøres det med unset( $kurv[5] ); som du gør ( tror jeg ), man kan jo ikke af din kode se hvilken parameter du kalder slet_vare() med.

slet_vare(5); vil slette element 5, at du opretter de 3 nye er ikke et problem. Hvis det var det du ville. Jeg formoder at du bruger de samme i opret_vare() så det er jo som det skal være.

Alt i alt: Din kode burde klare det du ønsker. Såvidt jeg da kan se.
Avatar billede wetdog Nybegynder
26. februar 2005 - 22:28 #4
hej

vil du svare så jeg kan give points ?

dit forslag virkede da jeg fik bedre styr på mine variabler
Avatar billede wetdog Nybegynder
24. marts 2005 - 21:50 #5
lukket
Avatar billede bojo Nybegynder
25. marts 2005 - 07:54 #6
Hov - godt du selv tog dem, jeg samler ikke point og havde helt glemt denne :-)
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