php 按一列对2d数据进行分组并对另一列求和以生成关联数组[重复]

rekjcdws  于 2023-04-19  发布在  PHP
关注(0)|答案(3)|浏览(129)

此问题已在此处有答案

十年前就关门了。
我需要从我的二维数组中按一列分组数据,并在相应的组中对另一列值求和。
在我的数据中,逗号用作小数位字符--这些是浮点值。
输入:

[
    [18, '1,07'];
    [ 8, '0,44'],
    [ 8, '0,67'],
    [18, '0,55'],
    [18, '0,19'],
    [ 8, '0,48'],
    [18, '2,59'],
    [ 8, '0,15'],
    [18, '12,97'],
]

预期结果:

[
    18 => '17,37',
     8 =>  '1,74',
]
11dmarpk

11dmarpk1#

试试这样的方法:

<?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
)

如果我没理解错的话。

6psbrbz9

6psbrbz92#

<?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)));
dgjrabp2

dgjrabp23#

小心!上次我处理增值税的规则是非常严格的计算增值税的每一行项目在发票上,然后加总增值税。
英国海关总署不接受将各项目合计后再计算增值税的做法,原因有二:

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

相关问题