/ 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
Vægt problemer
Fra : Martin


Dato : 10-08-06 19:36

Lyder lidt som en joke :)

Nå, men det er altså en helt anden slags vægt problemer - Jeg har nogle
problemer med at få fat i den rigtige pris på vægten i min webshop.

Jeg kan ikke lige greje en løsning.

Mit problem er at alt under 1 kg ikke for en pris.

Sådan ser linjen ud med vægt/priser
1:48.00,5:50.00,10:63.00,15:90.00,20:100.00
(jeg bruger ovenstående, fordi OSCommerce også bruger det)

vægt:pris,vægt:pris,vægt:pris

Som i kan se, så starter den ved 1 kg, og det er desværre ikke lige til
at ændre til 0 kg.

Så det jeg faktisk mangler er at når en vare fx vejer 0.20 kg så skal
den tage 1 kg prisen.

 
 
dtext.tele.dk (10-08-2006)
Kommentar
Fra : dtext.tele.dk


Dato : 10-08-06 21:05

> Sådan ser linjen ud med vægt/priser
> 1:48.00,5:50.00,10:63.00,15:90.00,20:100.00
> (jeg bruger ovenstående, fordi OSCommerce også bruger det)

Hvad med:

0:xx.xx;1:48.00,5:50.00,10:63.00,15:90.00,20:100.00

Det virker som en logisk løsning - men da jeg ikke kender OSCommerce ved jeg
ikke, hvordan det opfører sig i deres system.

Endvidere er det også lidt svært at forholde sig til uden en kode. :)

- Daniel



Martin (11-08-2006)
Kommentar
Fra : Martin


Dato : 11-08-06 01:56

dtext.tele.dk wrote:
>> Sådan ser linjen ud med vægt/priser
>> 1:48.00,5:50.00,10:63.00,15:90.00,20:100.00
>> (jeg bruger ovenstående, fordi OSCommerce også bruger det)
>
> Hvad med:
>
> 0:xx.xx;1:48.00,5:50.00,10:63.00,15:90.00,20:100.00

Som jeg skrev, så er det stortset umuligt at bruge 0 som start.

>
> Det virker som en logisk løsning - men da jeg ikke kender OSCommerce ved jeg
> ikke, hvordan det opfører sig i deres system.

Nu bruger jeg heller ikke OSCommerce, det eneste jeg bruger derfra er
fragt/vægt angivelsen - da der er nogle flinke mennesker som skriver dem
så snart de bliver opdateret :)

>
> Endvidere er det også lidt svært at forholde sig til uden en kode. :)

Der er skam ikke så meget kode at gøre godt med, på nuværende tidspunkt
andet end:

function getWeight($weight,$price=0,$packs=1) {
if($weight>20) {
$oldweigt=$weight;
$weight=20;
}
$exp = explode(",",$array);
foreach($exp AS $price) {
list($w,$p) = explode(":",$price);
if($w>$weight) $price+=$p;
}
if($oldweight) return getWeight($oldweight-$weight,$price,$packs++);
return array("price"=>$price,"packs"=>$packs);
}

Jesper Brunholm (11-08-2006)
Kommentar
Fra : Jesper Brunholm


Dato : 11-08-06 08:46

Martin skrev:
>>> Sådan ser linjen ud med vægt/priser
>>> 1:48.00,5:50.00,10:63.00,15:90.00,20:100.00

>> Hvad med:
>> 0:xx.xx;1:48.00,5:50.00,10:63.00,15:90.00,20:100.00
>
> Som jeg skrev, så er det stortset umuligt at bruge 0 som start.

så prøv at indlede med komma (amerikansk, = punktum):
..01:.0,.5:25.00 osv (altså 10 gram som er gratis og et halvt kilo til 25 kr)

Men jeg har ikke helt forstået om der er tale om løbende udregning af
vægt til afsending eller endelig udregning til portoprisen på alle
delenes afsendelse.

Jeg ville afgjort regne vægten ud for sig, og så sætte pris på når jeg
havde en samlet vægt.

> function getWeight($weight,$price=0,$packs=1) {
# jeg går ud fra at den her tager højde for at alt over 20 kg har en
enhedspris?
> if($weight>20) {
> $oldweigt=$weight;
> $weight=20;
> }
> $exp = explode(",",$array);
> foreach($exp AS $price) {
#hvor får du $exp fra, og nu overskriver du den $price som du har fået
med som argument...

# funktioner kan så vidt jeg ved ikke være rekursive (kalde sig selv)
medmindre de er en del af et (OOP) Class-object
> if($oldweight) return getWeight($oldweight-$weight,$price,$packs++);

mvh

Jesper Brunholm

Martin (11-08-2006)
Kommentar
Fra : Martin


Dato : 11-08-06 09:25

Martin wrote:
> function getWeight($weight,$price=0,$packs=1) {
> if($weight>20) {
> $oldweigt=$weight;
> $weight=20;
> }
> $exp = explode(",",$array);
> foreach($exp AS $price) {
> list($w,$p) = explode(":",$price);
> if($w>$weight) $price+=$p;
> }
> if($oldweight) return getWeight($oldweight-$weight,$price,$packs++);
> return array("price"=>$price,"packs"=>$packs);
> }

Nå - det krævede lige at man vågnede... hvornår lærer jeg mon ikk at
programmere når man er smadret! Suk!
Min løsning kom til at se sådan her ud:

function _getPrice($array,$weight,$packs=1,$price=0) {
echo $weight;
if(strpos($array["price"],",")===FALSE) $exp[] = "0:".$array["price"];
else $exp = explode(",",$array["price"]);
for ($i=0;$i<count($exp);$i++) {
$last=0;
list($w,$p) = explode(":",$exp[$i]);
if($weight >= $last && $weight <= $w) { $price+=$p; break; }
$last=$w;
}
$pakke = $packs+1;
if($weight>$this->_maxweight) return
$this->_getPrice($array,($weight-$this->_maxweight),$pakke,$price);
return array("packs"=>$packs,"price"=>$price);
}

Martin (11-08-2006)
Kommentar
Fra : Martin


Dato : 11-08-06 09:29

Martin wrote:
> $pakke = $packs+1;
> if($weight>$this->_maxweight) return
> $this->_getPrice($array,($weight-$this->_maxweight),$pakke,$price);
> return array("packs"=>$packs,"price"=>$price);
> }

Lige et tillægsspørgsmål

Nu har jeg prøvet at skrive $packs++ istedet for $pakke i funktions
kaldet, men så virker det ikke, men det virker fint som det står
ovenstående.

Er der en der kan forklare mig hvorfor?

Jesper Brunholm (11-08-2006)
Kommentar
Fra : Jesper Brunholm


Dato : 11-08-06 10:44

Martin skrev:
> Nu har jeg prøvet at skrive $packs++ istedet for $pakke i funktions
> kaldet

altså som parameter?

function testfkt($pakke=1){ # $pakke har en defaultværdi, så man kan
lade være med at medsende en værdi

VS

! ikke gyldig kode !
function testfkt($pakke++){ # værdien $pakke modtages og forhøjes med 1
inden den tages i brug i funktionen

Sidstnævnte er ikke muligt på den måde, generelt er det ret begrænset
hvad man kan sætte defaultværdier til, de kan heller ikke sættes til
variabler

Så vidt jeg forstod har du en løsning...

mvh

Jesper Brunholm

Martin (11-08-2006)
Kommentar
Fra : Martin


Dato : 11-08-06 12:01

Jesper Brunholm wrote:
> Martin skrev:
>
>> Nu har jeg prøvet at skrive $packs++ istedet for $pakke i funktions
>> kaldet
>
>
> altså som parameter?
>
> function testfkt($pakke=1){ # $pakke har en defaultværdi, så man kan
> lade være med at medsende en værdi
>
> VS
>
> ! ikke gyldig kode !
> function testfkt($pakke++){ # værdien $pakke modtages og forhøjes med 1
> inden den tages i brug i funktionen

Ej, det var lidt forkert - det var ved funktions kaldet jeg ikke forstod
det.

Altså funktionen ser således ud

function foo($bar=1) {
return foo($bar++);
if($bar==4) return true;
}

ovenstående repeater konstant indtil serveren skriger stop.

function foo($bar=1) {
return foo($bar+1);
if($bar==4) return true;
}

i denne der returner funktionen true.

Lig mærke til den lille ændring ved
return foo( $bar++ / $bar+1 )

Martin (11-08-2006)
Kommentar
Fra : Martin


Dato : 11-08-06 12:33

Martin wrote:
> Altså funktionen ser således ud
>
> function foo($bar=1) {
> return foo($bar++);
> if($bar==4) return true;
> }
>
> ovenstående repeater konstant indtil serveren skriger stop.
>
> function foo($bar=1) {
> return foo($bar+1);
> if($bar==4) return true;
> }

Hov, sådan her

function foo($bar=1) {
   if($bar==4) return true;
   else return foo($bar++);
}

function baz($bar=1) {
   if($bar==4) return true;
   else return baz($bar+1);
}

if(foo()) echo "Hurra Foo\n";
if(baz()) echo "Hurra Baz\n";

Hvis jeg udkommentere if(foo()) så virker det fint, ellers så timer
serveren bare ud.

Så spørgsmålet ligger sådan set bare i hvad forskellen er på $bar++ og
$bar+1

Martin (11-08-2006)
Kommentar
Fra : Martin


Dato : 11-08-06 13:16

Martin wrote:
> Så spørgsmålet ligger sådan set bare i hvad forskellen er på $bar++ og
> $bar+1

Fandt selv også svaret på dette, ved at åbne manualen - og læse lidt på
<http://dk2.php.net/manual/en/language.operators.increment.php>

Bent Stigsen (11-08-2006)
Kommentar
Fra : Bent Stigsen


Dato : 11-08-06 22:42

Martin wrote:
> Martin wrote:
>> Så spørgsmålet ligger sådan set bare i hvad forskellen er på $bar++ og
>> $bar+1
>
> Fandt selv også svaret på dette, ved at åbne manualen - og læse lidt på
> <http://dk2.php.net/manual/en/language.operators.increment.php>

Bare en bemærkning til linket, hvori der står:
"PHP supports C-style pre- and post-increment and decrement operators."

Det passer ikke helt. Syntaksen er den samme, men PHP ændrer
variablens værdi *umiddelbart* før eller efter at værdien af variablen
tages, for henholdsvis pre- eller post- inkrementering og
dekrementering. Det gør C ikke.

Fx.: "PHP: $a++ + $a" giver ikke det samme som "C: a++ + a"

--
/Bent

Peter Larsen (11-08-2006)
Kommentar
Fra : Peter Larsen


Dato : 11-08-06 07:15

Martin wrote:

hvad med dette (utestet, uden ansvar osv)

> 0.1:48.00,5:50.00,10:63.00,15:90.00,20:100.00


--
Regards, Peter Larsen - Domæne.dk

Martin (11-08-2006)
Kommentar
Fra : Martin


Dato : 11-08-06 08:20

Peter Larsen wrote:
> Martin wrote:
>
> hvad med dette (utestet, uden ansvar osv)
>
>
>>0.1:48.00,5:50.00,10:63.00,15:90.00,20:100.00

Tjoo, men hva så hvis en vare vejer under 10 gram?
(det er en webshop som skal bruges til alle ting, ligefra motorbåde til
ledninger)

Peter Larsen (12-08-2006)
Kommentar
Fra : Peter Larsen


Dato : 12-08-06 06:23

Martin wrote:

> Tjoo, men hva så hvis en vare vejer under 10 gram?
> (det er en webshop som skal bruges til alle ting, ligefra motorbåde til
> ledninger)

så lav det som 1 gram = prisen for pakken..

så kan du sende dine 10 gram's ting og udregne pakkepris

--
Regards, Peter Larsen - Domæne.dk

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

Månedens bedste
Årets bedste
Sidste års bedste