请问这段PHP数组该如何统计重复值和计算金额?

Array
(
    [0] => Array
        (
            [price] => 100
            [org_name] => '部门1'
        )

    [1] => Array
        (
            [price] => 100
            [org_name] => '部门2'
        )

    [2] => Array
        (
            [price] => 200
            [org_name] => '部门2'
        )
    [3] => Array
        (
            [price] => 500
            [org_name] => '部门1'
        )
)

最后想实现的是能统计到部门重复数量还有这个部门产生的金额是多少~ 求各位大佬帮帮忙~

Array
(
    [部门1] => Array
        (
            [count] => 2
            [price] => 600
        )

    [部门2] => Array
        (
            [count] => 2
            [price] => 300
        )
)

万分感谢~

阅读 2.3k
2 个回答

你可以使用 PHP 的 array_count_values() 函数来统计数组中重复值的数量。例如,假设你的数组是 $array,那么你可以使用下面的代码来统计重复值的数量:

$counts = array_count_values(array_column($array, 'org_name'));

这段代码会将数组中每个元素的 'org_name' 属性作为新数组的值,然后用 array_count_values() 函数统计每个值的数量。例如,对于上面的数组,$counts 数组的值会是:

Array
(
    ['部门1'] => 2
    ['部门2'] => 2
)

然后,你可以遍历 $array 数组,并累加每个部门的总金额。例如,你可以使用下面的代码来统计每个部门的总金额:

$prices = array();
foreach ($array as $item) {
    if (isset($prices[$item['org_name']])) {
        $prices[$item['org_name']] += $item['price'];
    } else {
        $prices[$item['org_name']] = $item['price'];
    }
}

这段代码会遍历 $array 数组,并根据每个元素的 'org_name' 属性来统计每个部门的总金额。例如,对于上面的数组,$prices 数组的值会是:

Array
(
    ['部门1'] => 600
    ['部门2'] => 300
)

最后,你可以将 $counts 和 $prices 数组合并为一个数组,这个数组就是你想要的结果。例如,你可以使用下面的代码来合并这两个数组:

$results = array();
foreach ($counts as $org_name => $count) {
    $results[$org_name] = array(
        'count' => $count,
        'price' => $prices[$org_name]
    );
}

这段代码会遍历 $counts 数组,并根据 $counts 数组中的值来创建新的数组。例如,对于上面的数组,$results 数组的值会是:

Array
(
    ['部门1'] => Array
        (
            ['count'] => 2
            ['price'] => 600
        )

    ['部门2'] => Array
        (
            ['count'] => 2
            ['price'] => 300
        )
)

总之,要实现你想要的统计结果,你可以使用 array_count_values() 函数来统计重复值的数量,然后遍历原数组来累加每个部门的总金额,最后将这两个结果合并为一个数组。希望这些信息对你有所帮助。

新手上路,请多包涵
$res = array();
foreach ($array as $item) {
    if (!isset($res[$item['org_name']])) {
        $res[$item['org_name']] = [
            'count' => 0,
            'price' => 0
        ];
    }
    $res[$item['org_name']]['count']++;
    // 浮点数计算建议使用bc算法
    $res[$item['org_name']]['price'] += $item['price'];
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题