首页 / PHP / php-相同格式的多维数组的总和
php-相同格式的多维数组的总和
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php-相同格式的多维数组的总和,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3096字,纯文字阅读大概需要5分钟。
内容图文
![php-相同格式的多维数组的总和](/upload/InfoBanner/zyjiaocheng/686/051d6e311b22417dba3bd38e43375a62.jpg)
我有以下格式的多维数组:
array (
0 =>
array (
'manual' => 1,
'cancelled' => 1,
'expired' => 1,
'earned' => 1,
'user' =>
array (
'user1' => 1,
'user2' => 1,
'user3' => 1,
'user4' => 1,
),
'transfer' =>
array (
'transfer1' =>
array (
'key1' => 1,
'key2' => 1,
'key3' => 1,
),
'transfer2' =>
array (
'key5' => 1,
'key6' => 1,
'key7' => 1,
),
),
'date' => '2018-03-07',
),
1 =>
array (
'manual' => 1,
'cancelled' => 1,
'expired' => 1,
'earned' => 1,
'user' =>
array (
'user1' => 1,
'user2' => 1,
'user3' => 1,
'user4' => 1,
),
'transfer' =>
array (
'transfer1' =>
array (
'key1' => 1,
'key2' => 1,
'key3' => 1,
),
'transfer2' =>
array (
'key5' => 1,
'key6' => 1,
'key7' => 1,
),
),
'date' => '2018-03-08',
),
我需要计算具有相同索引的数组值的总和.所以总数组应该如下
Array
(
[total] => Array
(
[manual] => 2
[cancelled] => 2
[expired] => 2
[earned] => 2
[user] => Array
(
[user1] => 2
[user2] => 2
[user3] => 2
[user4] => 2
)
[transfer] => Array
(
[transfer1] => Array
(
[key1] => 2
[key2] => 2
[key3] => 2
)
[transfer2] => Array
(
[key5] => 2
[key6] => 2
[key7] => 2
)
)
这就是总数,除日期外应具有相同的格式,但需要显示该值的总数.如何在PHP中完成呢?我使用了以下代码
$final = array_shift($input);
foreach ($final as $key => &$value){
$value += array_sum(array_column($input, $key));
}
unset($value);
var_dump($final);
其中$input被认为是第一个数组,而$final是总计.我认为这仅适用于单个索引.
解决方法:
您可以使用遍历所有“树”的递归函数.
那里
如果元素是数组,则在结果数组中创建相同的元素,并为每个键运行函数.
如果有数字,则只需在结果中添加值即可.
这是一个样本
<?php
// Array with data
$arr=array(array('manual'=>1,'cancelled'=>1,'expired'=>1,'earned'=>1,'user'=>array('user1'=>1,'user2'=>1,'user3'=>1,'user4'=>1,),'transfer'=>array('transfer1'=>array('key1'=>1,'key2'=>1,'key3'=>1,),'transfer2'=>array('key5'=>1,'key6'=>1,'key7'=>1,)),'date'=>'2018-03-07',),array('manual'=>1,'cancelled'=>1,'expired'=>1,'earned'=>1,'user'=>array('user1'=>1,'user2'=>1,'user3'=>1,'user4'=>1,),'transfer'=>array('transfer1'=>array('key1'=>2,'key2'=>2,'key3'=>2,),'transfer2'=>array('key5'=>2,'key6'=>2,'key7'=>2,)),'date'=>'2018-03-08',));
//Init result array
$res=array('total'=>array());
foreach ($arr as $key=>$val) {
//Run it for each element and store result to $res['total']
countTotal($res['total'],$val);
}
//Show result
print_r($res);
/*
* Count totals for branch of array
* @param $res - reference to branch of result array
* @param $arr - branch of data array
*/
function countTotal(&$res,$arr) {
foreach ($arr as $key=>$val) {
if (is_array($val)) {
//it's array. Create "branch" in $res and run countTotal() to calc total for it
if (!isset($res[$key])) $res[$key]=array();
countTotal($res[$key],$val);
} else if (is_numeric($val)) {
// it's number. Create "leaf" if need and add value.
if (!isset($res[$key])) $res[$key]=0;
$res[$key]+=$val;
}
}
}
如您所见,它使用对结果数组分支的引用来累计总数
结果
Array
(
[total] => Array
(
[manual] => 2
[cancelled] => 2
[expired] => 2
[earned] => 2
[user] => Array
(
[user1] => 2
[user2] => 2
[user3] => 2
[user4] => 2
)
[transfer] => Array
(
[transfer1] => Array
(
[key1] => 3
[key2] => 3
[key3] => 3
)
[transfer2] => Array
(
[key5] => 3
[key6] => 3
[key7] => 3
)
)
)
)
在第二个“转移”中,我使用了“ 2”,所以总和为“ 3”
内容总结
以上是互联网集市为您收集整理的php-相同格式的多维数组的总和全部内容,希望文章能够帮你解决php-相同格式的多维数组的总和所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。