PHP多种方式实现:计算多维数组中指定字段的数量总和,并存到新的数组中

19 篇文章 0 订阅

求下列多维数组中 mp的总和 和 total 的总和,放到新的数组中

$arr = [
  0 => [
    "id" => 2
    "bjyf" => "2023-03"
    "create_time" => "2023-04"
    "sn" => "WC230327CS0001"
    "ssn" => "2"
    "report_status_name" => "检测中"
    "report_sn" => null
    "sbpz" => "曳引驱动载货电梯"
    "sblb" => "曳引与强制驱动电梯"
    "nature" => "定期检测"
    "role" => "主检"
    "total" => 10
    "mp" => "20"
  ],
  1 => [
    "id" => 2
    "bjyf" => "2023-03"
    "create_time" => "2023-04"
    "sn" => "WC230327CS0001"
    "ssn" => "2"
    "report_status_name" => "检测中"
    "report_sn" => null
    "sbpz" => "曳引驱动载货电梯"
    "sblb" => "曳引与强制驱动电梯"
    "nature" => "定期检测"
    "role" => "主检"
    "total" => 1230
    "mp" => "80"
  ],
  2 => [
    "id" => 2
    "bjyf" => "2023-03"
    "create_time" => "2023-04"
    "sn" => "WC230327CS0001"
    "ssn" => "2"
    "report_status_name" => "检测中"
    "report_sn" => null
    "sbpz" => "曳引驱动载货电梯"
    "sblb" => "曳引与强制驱动电梯"
    "nature" => "定期检测"
    "role" => "主检"
    "total" => 98760
    "mp" => "1230"
  ]
]

方式1:

使用foreach循环来遍历数组,并使用一个新的数组来存储求和结果。具体实现:

function sumArray($arr) {
  $result = array("mp_sum" => 0, "total_sum" => 0); // 初始化结果数组


  foreach ($arr as $item) {
    $result['mp_sum'] += intval($item['mp']); // 求mp的总和
    $result['total_sum'] += intval($item['total']); // 求total的总和
  }

  return $result;
}

输出结果为:

Array
(
    [mp_sum] => 1330
    [total_sum] => 98800
)

方式2:

使用array_reduce函数,通过回调函数累加,具体实现:

// 定义回调函数
$sumCallback = function ($carry, $item) {
  $carry['mp_sum'] += intval($item['mp']); // 求mp的总和
  $carry['total_sum'] += intval($item['total']); // 求total的总和
  return $carry; // 返回累加结果
};

//使用方式

$result = array_reduce($arr, $sumCallback, array("mp_sum" => 0, "total_sum" => 0)); // 初始化累加器为结果数组

输出结果和之前的实现一样:

Array
(
    [mp_sum] => 1330
    [total_sum] => 98800
)

方式3:

使用array_column、array_sum和array_reduce三个函数结合实现累加

$mp_sum = array_sum(array_column($arr, 'mp')); // 求mp的总和
$total_sum = array_sum(array_column($arr, 'total')); // 求total的总和

$result = array("mp_sum" => $mp_sum, "total_sum" => $total_sum); // 初始化结果数组

print_r($result); // 输出结果

输出结果和之前的实现一样:

Array
(
    [mp_sum] => 1330
    [total_sum] => 98800
)

因为数据量小,这3中方法的运算效率都差不多

但是实际上,使用array_reduce函数的效率是要高于使用foreach循环和array_sum函数的效率的。这是因为array_reduce函数使用了内置的C语言编写的底层优化,避免了PHP解释器中间的环节,从而提高了执行效率。

在处理大量数据时,应该优先考虑使用array_reduce函数来实现累加操作。

对于小量数据的处理,三种方法之间的效率差别微不足道,在实际使用中可以根据自己的习惯和实际情况选择更加适合自己的方法。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

upcto

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值