第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

PHP輸出不同數(shù)字組合相加的值

PHP輸出不同數(shù)字組合相加的值

PHP
瀟湘沐 2023-08-11 17:06:47
我有一個(gè)可以包含一系列附加組件的產(chǎn)品,我需要計(jì)算包含任意數(shù)量附加組件的產(chǎn)品的價(jià)格。目前有五個(gè)附加組件,但將來(lái)可能會(huì)有更多。一開(kāi)始只有幾個(gè),我只是硬編碼不同的組合,但現(xiàn)在我已經(jīng)有了五個(gè),這種方法變得不可行。產(chǎn)品的基本價(jià)格可能為 10 美元,附加產(chǎn)品的價(jià)格可能不同,例如 10 美元 + A + B、10 美元 + A + B + C、10 美元 + A + C + D + E 等等。每個(gè)產(chǎn)品還需要 3x、6x 和 12x 的乘數(shù),因此之前的組合,但如果產(chǎn)品的基本價(jià)格為 10 美元,則添加的數(shù)字為 30 美元、60 美元或 120 美元。理想情況下,我該如何在 PHP 中做到這一點(diǎn)并刪除重復(fù)值?
查看完整描述

1 回答

?
手掌心

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊

不要將每個(gè)附加組件視為特殊情況,而是一般地識(shí)別每個(gè)附加組件。如果您使用面向?qū)ο蟮慕Y(jié)構(gòu),這可能看起來(lái)像一個(gè)AddOn接口或基類,其中有一個(gè)方法返回其成本和所需的任何其他屬性。然后,您只需從基本價(jià)格開(kāi)始,然后循環(huán)遍歷乘數(shù)(如果沒(méi)有乘數(shù),則為 1)。該解決方案的關(guān)鍵部分是使用遞歸和迭代的組合來(lái)確定附加組件的所有可能的排列。


像這樣的東西:


class AddOn{


    private $price, $description;


    public function __construct(float $price, string $description){

        $this->price=$price;

        $this->description=$description;

    }


    public function getPrice(): float{

        return $this->price;

    }


    public function getDescription(): string{

        return $this->description;

    }


}


class ProductConfiguration{


    private $basePrice, $multiplier, $addOns;


    public function __construct(float $basePrice, int $multiplier, array $addOns){

         $this->basePrice=$basePrice;

         $this->multiplier=$multiplier;

         $this->addOns=$addOns;

    }


    public function getPrice(): float{

        $price=$this->basePrice*$this->multiplier;

        foreach($this->addOns as $addOn)

            $price+=$addOn->getPrice();

        return $price;

    }


    public function getMultiplier(): int{

        return $this->multiplier;

    }


    public function getAddOns(): array{

        return $this->addOns;

    }


}


$basePrice=10;


$addOns=[

    new AddOn(5, "AddOn A"),

    new AddOn(1, "AddOn B"),

    new AddOn(20, "AddOn C")

];

$permutations=[[]]; //Include an empty set as a possible option

//This recursive function accepts the base set of add-ons, a reference to an array to which to add any permutations, and a base parameter that will be used only internally to pass the parent permutations

function getPermutations(array $addOns, array &$permutations, array $base=[]): void{

    //array_unshift removes the first item from the array, since this is done first, it will prevent duplicate combinations that differ only in order

    while(($current=array_shift($addOns))!==null){

        //Combine the parent permutation($base) with the next value in the array to create this permutation

        $permutation=array_merge($base, [$current]);

        $permutations[]=$permutation; //Push to the referenced array

        getPermutations($addOns, $permutations, $permutation); //Recursively compute all permutations that begin with the current one

    } //Subsequent iterations of the while loop will handle each value in the array as the initial value without each other value

}

getPermutations($addOns, $permutations);


$multipliers=[

    1,

    3,

    6,

    12

];

$configurations=[];

foreach($multipliers as $m){

    foreach($permutations as $p){

       $configurations[]=new ProductConfiguration($basePrice, $m, $p);

    }

}

//$configurations now contains the set of (de-duplicated) product configurations(each possible combination)



查看完整回答
反對(duì) 回復(fù) 2023-08-11
  • 1 回答
  • 0 關(guān)注
  • 130 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)