| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | Array Spørgsmål Fra : Dennis T. Holm | 
  Dato :  20-02-03 19:47 |  
  |   
            Jeg har nogle arrays i min session som indeholder diverse infos om en
 ordre... :
 
 
 
 
   session_register("ses_basket_items"); //antal varer i kurven
   session_register("ses_basket_band");
   session_register("ses_basket_title");
   session_register("ses_basket_amount");
   session_register("ses_basket_price");
   session_register("ses_basket_catalogNr");
   session_register("ses_basket_cdID");
 
 Når man er færdig med at lægge varer i sin indkøbskurv skal man selvfølgelig
 også have mulighed for at slette en vare.. Men problemet er om der ikke er
 en lettere måde at gøre det på end, at skulle rykke rundt på hele strukturen
 i mit array.. F.eks. er det i Java muligt at slette en række i en vector
 hvorefter vectoren bliver trukket sammen til den rigtige længde...
 
 Lige nu ser jeg som den eneste mulighed for at kunne slette noget i mine
 arrays og bevare strukturen, at kører arrayet igennem en FOR løkke fra det
 punkt hvor der er noget som skal slettes og sætte de data som kommer som det
 næste i arrayet lig med det der skal slettes og sådan hele vejen igennem..
 
 Alt i ALT er problemet at jeg gerne ville have en funktion som kunne slette
 data i mit array og derefter trække arrayet sammen... hvis det er noget som
 findes i PHP..
 
 
 Dennis
 
 
 
 
  
            
             |   |   
            
        
 
            
         
           Thomas Lindgaard (20-02-2003) 
         
	
            | Kommentar Fra : Thomas Lindgaard | 
  Dato :  20-02-03 22:22 |  
  |   
            "Dennis T. Holm" <dennis@contempt.dk> wrote in
 news:b337q0$dvf$1@sunsite.dk: 
 
 > Alt i ALT er problemet at jeg gerne ville have en funktion som kunne
 > slette data i mit array og derefter trække arrayet sammen... hvis det
 > er noget som findes i PHP..
 
 <?php
   $array = array("hej", "med", "dig")
   unset($array[1]);
   print_r($array);
 ?>
 
 unset() fjerner en indgang fra dit array (eller fjerner en vilkårlig 
 variabel fra dit script), men lader indices i arrayet være, dvs. outputtet 
 fra print_r vil være følgende:
 
   array(
     0 => "hej",
     2 => "dig"
   )
 
 Det er dog også ganske udmærket hvis du bruger foreach() når du itererer 
 gennem arrays:
 
   foreach ($array as $key => $value)
   {
     print $key.' => '.$value.'<br>';
   }
 
 -- 
 Hyggehej
 /Thomas
  
            
             |   |   
            
        
 
            
         
           Dennis T. Holm (20-02-2003) 
         
	
            | Kommentar Fra : Dennis T. Holm | 
  Dato :  20-02-03 23:07 |  
  |   
            Hej
 
 jeg har prøvet at unsette de elementer i mine arrays som jeg vil have
 fjernet.. Men problemet bliver derefter at den ikke trækker arrayet sammen,
 dvs. der bliver en tom plads der hvor jeg har unsettet... Det fatter jeg
 ikke lige.. Hvis den nu kunne reindexere arrayet så der ikke er huller der
 hvor man har brugt unset metoden ville det være genialt..
 
 
 MVH  Dennis
 
 > <?php
 >   $array = array("hej", "med", "dig")
 >   unset($array[1]);
 >   print_r($array);
 > ?>
 >
 > unset() fjerner en indgang fra dit array (eller fjerner en vilkårlig
 > variabel fra dit script), men lader indices i arrayet være, dvs. outputtet
 > fra print_r vil være følgende:
 >
 >   array(
 >     0 => "hej",
 >     2 => "dig"
 >   )
 >
 > Det er dog også ganske udmærket hvis du bruger foreach() når du itererer
 > gennem arrays:
 >
 >   foreach ($array as $key => $value)
 >   {
 >     print $key.' => '.$value.'<br>';
 >   }
 >
 > --
 > Hyggehej
 > /Thomas
 
 
  
            
             |   |   
            
        
 
            
         
            Thomas Lindgaard (21-02-2003) 
         
	
            | Kommentar Fra : Thomas Lindgaard | 
  Dato :  21-02-03 12:16 |  
  |   
            "Dennis T. Holm" <dennis@contempt.dk> wrote in 
 news:b33jgr$jbd$1@sunsite.dk: 
 
 > Men problemet bliver derefter at den ikke trækker arrayet sammen, dvs.
 > der bliver en tom plads der hvor jeg har unsettet... 
 
 Hum... hvorfor er det et problem? Er det fordi du har flere arrays der skal 
 passe sammen på keys? Antag at du f.eks. har
 
   $varer = array(
     0 => 'en grøn ged',
     1 => 'gummiand med gebis',
     2 => 'Libero Up-and-go 6-pack'
     3 => 'brugt Ferrari med slidte dæk'
   );
 
   $priser = array(
     0 => '42 kroner',
     1 => '12 ecu',
     2 => '3 milliarder lire',
     3 => 'tre dromedarer og en kiste med guld'
   );
 
 og her unsetter() $varer[2], så du får $priser[2] til "at hænge" - er det 
 problemet?
 
 For hvis det er kan du undgå det ved at bruge foreach() i stedet for for():
 
   foreach ($varer as $indeks => $vare)
   {
     print $vare.' koster '.$priser[$indeks].'<br>';
   }
 
 > Det fatter jeg ikke lige.. Hvis den nu kunne reindexere arrayet så der
 > ikke er huller der hvor man har brugt unset metoden ville det være
 > genialt.. 
 
 Ellers skal du have fat i array_splice():
 
   print_r($varer);
   array_splice($varer, 2, 1);
   print_r($varer);
 
 .... og det er jo nok det du vil :)
 
 -- Hyggehej /Thomas 
  
            
             |   |   
            
        
 
            
         
             Dennis T. Holm (21-02-2003) 
         
	
            | Kommentar Fra : Dennis T. Holm | 
  Dato :  21-02-03 12:53 |  
  |   
            Hej
 
 Problemet er, at siger vi nu at jeg har tilføjet nogle varer til min
 indkøbskurv, så viser min kurv feks. følgende..
 
 1 stk. gummiand
 3 stk. træhest
 2 stk. atombomber
 
 Når jeg så vil have unsettet den første forekomst i mine arrays, som jo er
 alle informationer om min gummiand og antal osv. så reindexerer den ikke mit
 array, men arrayet indeholder stadig tomme felter på den plads hvor data om
 gummiand før var..
 
 dvs min indkøbskurv vil se ud som følgende
 
 stk.  <---- Den her bliver stadig vist, men er tom... Dvs. min plads [0] i
 mine arrays indeholde ingen data men er der stadig.
 3 stk. træhest
 2 stk. atombomber
 
 Som jeg forstår det så reindexerer unset ikke mit array, men lader bare den
 plads som bliver unsettet være tom. Søger en metode som også reindexerer
 arrayet så der ikke er felter i mit array som ikke indeholder data.
 
 MVH Dennis
 
 
 
 > > Men problemet bliver derefter at den ikke trækker arrayet sammen, dvs.
 > > der bliver en tom plads der hvor jeg har unsettet...
 >
 > Hum... hvorfor er det et problem? Er det fordi du har flere arrays der
 skal
 > passe sammen på keys? Antag at du f.eks. har
 >
 >   $varer = array(
 >     0 => 'en grøn ged',
 >     1 => 'gummiand med gebis',
 >     2 => 'Libero Up-and-go 6-pack'
 >     3 => 'brugt Ferrari med slidte dæk'
 >   );
 >
 >   $priser = array(
 >     0 => '42 kroner',
 >     1 => '12 ecu',
 >     2 => '3 milliarder lire',
 >     3 => 'tre dromedarer og en kiste med guld'
 >   );
 >
 > og her unsetter() $varer[2], så du får $priser[2] til "at hænge" - er det
 > problemet?
 >
 > For hvis det er kan du undgå det ved at bruge foreach() i stedet for
 for():
 >
 >   foreach ($varer as $indeks => $vare)
 >   {
 >     print $vare.' koster '.$priser[$indeks].'<br>';
 >   }
 >
 > > Det fatter jeg ikke lige.. Hvis den nu kunne reindexere arrayet så der
 > > ikke er huller der hvor man har brugt unset metoden ville det være
 > > genialt..
 >
 > Ellers skal du have fat i array_splice():
 >
 >   print_r($varer);
 >   array_splice($varer, 2, 1);
 >   print_r($varer);
 >
 > ... og det er jo nok det du vil :)
 >
 > -- Hyggehej /Thomas
 
 
  
            
             |   |   
            
        
 
            
         
              Niels Andersen (21-02-2003) 
         
	
            | Kommentar Fra : Niels Andersen | 
  Dato :  21-02-03 15:51 |  
  |  
 
            Dennis T. Holm wrote in <b353si$q83$1@sunsite.dk>:
 > dvs min indkøbskurv vil se ud som følgende
 > 
 > stk.  <---- Den her bliver stadig vist, men er tom... Dvs. min plads [0] i
 > mine arrays indeholde ingen data men er der stadig.
 > 3 stk. træhest
 > 2 stk. atombomber
 Så er problemet at du viser kurven på en uheldig måde. Prøv med foreach i 
 stedet, som Thomas foreslog (enda med eksempel).
 -- 
 Mvh.
 Niels Andersen
 http://myplace.dk/articles/getpost/?lang=da
            
             |   |   
            
        
 
            
         
           Martin Møller Bæk (20-02-2003) 
         
	
            | Kommentar Fra : Martin Møller Bæk | 
  Dato :  20-02-03 22:22 |  
  |   
            Dennis T. Holm wrote:
 <snip>
 >   session_register("ses_basket_amount");
  >
 > Når man er færdig med at lægge varer i sin indkøbskurv skal man selvfølgelig
 > også have mulighed for at slette en vare.. Men problemet er om der ikke er
 > en lettere måde at gøre det på end, at skulle rykke rundt på hele strukturen
 > i mit array.. F.eks. er det i Java muligt at slette en række i en vector
 > hvorefter vectoren bliver trukket sammen til den rigtige længde...
 <snip>
 
 Jeg har samme "problem". Jeg har løst det ved, at når en vare slettes
 så sættes antallet ('ses_basket_amount') til 0. Når indkøbskurven
 vises tjekkes om antallet er 0. I så fald vises en vare ikke.
 
 Håber du kan bruge det til noget, selv om det jo ville
 være nemmere, hvis man kunne slette og trække sammen i
 array'et :)
 
 Mvh
 Martin MB
 
  
            
             |   |   
            
        
 
            
         
           Jens Tønnesen (20-02-2003) 
         
	
            | Kommentar Fra : Jens Tønnesen | 
  Dato :  20-02-03 22:59 |  
  |  
 
            "Dennis T. Holm" <dennis@contempt.dk> skrev i
 dk.edb.internet.webdesign.serverside.php:
 >Alt i ALT er problemet at jeg gerne ville have en funktion som kunne slette
 >data i mit array og derefter trække arrayet sammen... hvis det er noget som
 >findes i PHP..
 Er det ikke array_splice(), du søger?
 http://www.php.net/manual/en/function.array-splice.php
-- 
 Jens Tønnesen -  http://www.pressefoto.dk
            
             |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |