龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

php AA制分账

时间:2014-08-16 11:42来源:网络整理 作者:网络 点击:
分享到:
AA制分账 [代码片段(67行)]
<?php
header('content-type: text/html; charset=utf-8');
/**
 * AA账目
 * @author heping1
 */
class account{
    public $accounts;
    public $income;
    public $pay; 
    public $desc;
    function __construct($accounts)
    {
        foreach($accounts as $k=>$v)
        {
            if($v > 0)
            {
                $arr_income[$k] = $v;
            }elseif($v < 0)
            {
                $arr_pay[$k] = $v;
            }
        }
        arsort($arr_income);
        asort($arr_pay);
        $this->income = $arr_income;
        $this->pay = $arr_pay;
    }
    function AA()
    {
        foreach($this->income as $k=>&$v)
        {
            foreach($this->pay as $k1=>&$v1)
            {
                if($v + $v1 > 0)
                {
                    $this->desc[] = $k.'给'.$k1.($v1 * -1).'元';
                    $this->income[$k] = $v + $v1;
                    unset($this->pay[$k1]);
                    $this->AA();
                }else
                {
                    $this->desc[] = $k.'给'.$k1.$v.'元';
                    $this->pay[$k1] = $v + $v1;
                    unset($this->income[$k]);
                    $this->AA();
                }
            }
        }
    }
}
$accounts = array(
    'A'=>50, // A总共需要支付的金额为50
    'B'=>40,
    'C'=>10,
    'D'=>-20, // D需要收取的金券为20
    'E'=>-30,
    'F'=>-20,
    'G'=>-30,
    'H'=>0
);
$account = new account($accounts);
$account->AA();
print_r($account->desc);
// output :
// Array ( [0] => A给G30元 [1] => A给E20元 [2] => B给E10元 [3] => B给D20元 [4] => B给F10元 [5] => C给F10元)
//该片段来自于http://outofmemory.cn
精彩图集

赞助商链接