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