Avatar billede astengaard Nybegynder
08. december 2004 - 11:31 Der er 2 kommentarer og
1 løsning

Sletning af elementer i array

Hejsa

Jeg har problemer med at fjerne nogle elementer i et array.

Jeg har nogle varelinier i et array, hvor nøglen er vareid og værdien er antal. Nogle af varerne er tilbehør til andre varer, så der er vareid en "sammensat nøgle".
Array'et kan se således ud:
[111] = 2
[111+57] = 1
[111+58} = 2
[222] = 1
[222+60] = 2

Dvs. at [111+57] og [111+58] hører til [111] osv.
Så jeg har lavet en sletVarelinie som tager et vareid, der sletter varelinien med vareid og alle tilhørende varer, men skidtet virker ikke :o(

Det ser således ud:

01 // Funktion fjerner varelinie med vareid $delVareid og alle tilhørende varer
02 function removeVarelinie($delVareid) {
03  unset($this->varelinier[$delVareid]);
04  $delVareid .= "+";
05  reset($this->varelinier);
06  while(list($vareid,$varelinie) = each($this->varelinier)) {
07    echo("Jeg har fundet vare med vareid: $vareid <br>");
08    if(strpos($vareid,$delVareid) !== false) {
09      echo("Jeg skal slette Vareid: $vareid <br>");
10      unset($this->varelinier[$vareid]);
11    }
12  }
13 } // function removeVarelinie

$this er en kurv, der bl.a. har array'et varelinier.
Som I kan se, har jeg sat lidt debugging ind, og jeg kan se, at jeg finder de rigtige varer, men unset-kommandoen i linie 10 fungerer ikke efter hensigten.

Hvad gør jeg galt?
Avatar billede Slettet bruger
08. december 2004 - 11:39 #1
$array[222+60] er det samme som $array[282] !!

Så hvis du skal lede efter tilbehør til vare 111 skal du se efter om 111+ er i keyen.
Hvis du skal lede efter selve vare 111 skal du finde netop keyen 111.
Du kontrollerer om et substring er i en streg med strstr();

Det var vidst hvad man kalder et let skub fremad. (Hjælp til selvhjælp ;o) )

Hvis du skal have lavet et kode eksempel så sig til, men prøv først om du kan selv :)
Avatar billede astengaard Nybegynder
08. december 2004 - 13:01 #2
Jeg lister det jeg har i kurven ud, og der står [111+57] som [111+57] og ikke som [168], men det kan da være at jeg skal prøve et andet adskillelsestegn end + ?

Hvis du læste koden igennem inden du begyndte at skubbe mig fremad, så vil du se at jeg har gjort nøjagtig som du foreslår...

I linie 3 sletter jeg varelinier[111]
I linie 4 sætter jeg et plus efter, så delVareid = 111+
I linie 8 tjekker jeg om 111+ er i vareid'et (Jeg vælger at gøre det med strpos istedet, men det giver vist samme resultat)

Som jeg skriver i kommentaren til koden, så finder jeg de rigtige varer [111+57] og [111+58], men unset sletter dem ikke...

Konstruktive forslag modtages meget gerne
Avatar billede astengaard Nybegynder
10. december 2004 - 19:14 #3
Lukker spm.
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