/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
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

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408937
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste