【问题标题】:Php Arrays Sum Group By [duplicate]Php Arrays Sum Group By [重复]
【发布时间】:2012-07-24 14:34:35
【问题描述】:

可能重复:
php group by SUM using multi dimensional array

我正在为一家批发公司制作购物车。我稍后也会创建发票。逻辑一样。

首先,我将 paket(包装)* paket adeti(包装数量)* fiyatı(价格)相乘并将其写在列表的末尾。现在我必须计算增值税。主要问题是我们以前不知道增值税率。

可能存在 3 种不同的增值税率。 (这取决于客户选择的产品)可能是一个。

我做了一个大桶数组

$vats[] = array($row['vat'], $row['wholesaleprice'] - $wholesaleprice);

结果是这样的

Array ( 
[0] => Array ( [0] => 18 [1] => 1,07 ) 
[1] => Array ( [0] =>  8 [1] => 0,44 ) 
[2] => Array ( [0] =>  8 [1] => 0,67 ) 
[3] => Array ( [0] => 18 [1] => 0,55 ) 
[4] => Array ( [0] => 18 [1] => 0,19 ) 
[5] => Array ( [0] =>  8 [1] => 0,48 ) 
[6] => Array ( [0] => 18 [1] => 2,59 ) 
[7] => Array ( [0] =>  8 [1] => 0,15 ) 
[8] => Array ( [0] => 18 [1] => 12,97 ) 
)

我必须按比率对增值税组求和...

我想像这样显示

增值税 (%18) 136,26 TL 增值税 (%8) 16,90 里拉 增值税 (%1) 9,28 里拉

我怎样才能在快捷方式中做到这一点。我检查了数组函数。但我找不到任何有用的东西。

购物车:http://i.stack.imgur.com/DDsCq.png

【问题讨论】:

  • 也许您也可以将增值税价格存储在数据库表中,并在该表上执行SELECT。现在 yuo 可以使用 SQL 的排序和分组功能了。 (另外:如果 18% = 136,26 怎么能 8% = 16,90?)

标签: php arrays multidimensional-array group-by sum


【解决方案1】:

试试这样的:

<?php

$data = Array ( 
    Array ( 0 => '18', 1 => '1,07' ),
    Array ( 0 => '8', 1 => '0,44' ),
    Array ( 0 => '8', 1 => '0,67' ),
    Array ( 0 => '18', 1 => '0,55' ), 
    Array ( 0 => '18', 1 => '0,19' ),
    Array ( 0 => '8', 1 => '0,48' ),
    Array ( 0 => '18', 1 => '2,59' ),
    Array ( 0 => '8', 1 => '0,15' ),
    Array ( 0 => '18', 1 => '12,97' ) 
);

// predefine array
$data_summ = array();
foreach ( $data as $value ) {
    $data_summ[ $value[0] ] = 0;
}

foreach ( $data as $list ) {
    $number = str_replace( ",", ".", $list[1] ) * 1;
    $data_summ[ $list[0] ] += (float)$number;
}

?>

$data_summ的输出:

Array
(
    [8] => 1.74
    [18] => 17.37
)

如果我理解正确的话。

【讨论】:

  • 您定义了一个预定义数组。但我们不知道值 8 或 18 或 1。因为它取决于列表中的产品。
  • 编辑了代码,因此即使您不知道值,数组也是预定义的。需要 0 起始值,然后将 float 值放入其中。
【解决方案2】:
<?php

function multiplyArray($array) {
    $result = array();

    foreach ($array as $value) {
        $result[] = array_product(array_map('floatval', str_replace(',', '.', $value)));
    }

    return $result;
}

$array = array(
    0 => array(0 => '18', 1 => '1,07'),
    1 => array(0 => '8', 1 => '0,44'),
    2 => array(0 => '8', 1 => '0,67'),
    3 => array(0 => '18', 1 => '0,55'),
    4 => array(0 => '18', 1 => '0,19'),
    5 => array(0 => '8', 1 => '0,48'),
    6 => array(0 => '18', 1 => '2,59'),
    7 => array(0 => '8', 1 => '0,15'),
    7 => array(0 => '18', 1 => '12,97'),
);

// Outputs
var_dump($array);
var_dump(multiplyArray($array));
var_dump(array_sum(multiplyArray($array)));

【讨论】:

    【解决方案3】:

    小心!上次我处理增值税时,规则非常严格地计算发票中每个行项目的增值税,然后将总增值税相加。

    Her Majesties Customs and Excise 不接受合计行项目,然后计算总计的增值税。 这有两个原因:-

    • Plain Greed - 大多数舍入误差将有利于消费税。
    • 实用性 -- 通常单行项目会从装运中丢失、被拒绝或退回 -- 如果首先计算每个发票行的增值税,则更容易计算要贷记的增值税。

    【讨论】:

      猜你喜欢
      • 2017-06-09
      • 2017-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-28
      • 1970-01-01
      • 2017-07-16
      • 2020-01-19
      相关资源
      最近更新 更多