Php 使用相同的键组合索引数组
我正在使用Flot jQuery插件创建一个关于每个平台有多少访问者的图表。我想创建一个第四行,根据之前检索到的数据计算总访客数 我需要合并多个多维索引数组,而不是简单地递归合并它们。即:Php 使用相同的键组合索引数组,php,arrays,flot,Php,Arrays,Flot,我正在使用Flot jQuery插件创建一个关于每个平台有多少访问者的图表。我想创建一个第四行,根据之前检索到的数据计算总访客数 我需要合并多个多维索引数组,而不是简单地递归合并它们。即: $arr1 = [[2016/05/04,2],[2016/05/03,4],[2016/05/02,6]]; $arr2 = [[2016/05/04,1],[2016/05/03,3],[2016/05/02,2]]; $arr3 = [[2016/05/04,6],[2016/05/03,7],[201
$arr1 = [[2016/05/04,2],[2016/05/03,4],[2016/05/02,6]];
$arr2 = [[2016/05/04,1],[2016/05/03,3],[2016/05/02,2]];
$arr3 = [[2016/05/04,6],[2016/05/03,7],[2016/05/02,8]];
输出应为:
$arrTotal = [[2016/05/04,9],[2016/05/03,14],[2016/05/02,16]];
我如何(相当)简单地完成这项工作?首先,你不能像以前那样申报日期:
$arr1 = [[2016/05/04,2],[2016/05/03,4],[2016/05/02,6]];
因为它需要2016年,除以5,再除以4。你需要把它们放在引号里
$arr1 = [['2016/05/04',2],['2016/05/03',4],['2016/05/02',6]];
但要创建关联数组,应按以下方式执行:
$arr1 = array('2016/05/04' => 2, '2016/05/03' => 4, '2016/05/02' => 6);
$arr2 = array('2016/05/04' => 1, '2016/05/03' => 3, '2016/05/02' => 2);
$arr3 = array('2016/05/04' => 6, '2016/05/03' => 7, '2016/05/02' => 8);
现在您要做的就是遍历每个数组并将它们相加
$merge = array();
function mergeArray(Array &$merge, Array $array){
// Loop through each key and value
foreach($array as $key => $value)
// Make sure the value is numeric
if(is_numeric($value)){
if(!isset($merge[$key]))
$merge[$key] = $value;
else
$merge[$key] += $value;
}
}
mergeArray($merge, $arr1);
mergeArray($merge, $arr2);
mergeArray($merge, $arr3);
现在如果您转储$merge
:
array(3) {
["2016/05/04"]=>
int(9)
["2016/05/03"]=>
int(14)
["2016/05/02"]=>
int(16)
}
构建一个方法,该方法将根据现有值的键对值求和
$arr1 = array('2016/05/04'=>2,'2016/05/03'=>4,'2016/05/02'=>6);
$arr2 = array('2016/05/04'=>1,'2016/05/03'=>3,'2016/05/02'=>2);
$arr3 = array('2016/05/04'=>2,'2016/05/03'=>7,'2016/05/02'=>8);
function array_sum(&$new_arr,$arr) {
foreach ($arr as $date_key => $num_value) {
// initialize date in new array with 0, if not done previously
if (! isset($new_arr[$date_key])) { $new_arr[$date_key] = 0; }
// add number for indexed element of array
$new_arr[$date_key] += $num_value;
}
}
$new_arr = array();
array_sum($new_array,$arr1);
array_sum($new_array,$arr2);
array_sum($new_array,$arr3);
您正试图将每个嵌套数组中的每秒值与其在父数组中的位置进行求和。
使用
array\u map
、array\u sum
和array\u column
函数,有一个简短的解决方案:
$groupped = array_map(null, $arr1,$arr2,$arr3);
$result = array_map(function($v){
return [$v[0][0], array_sum(array_column($v, 1))];
}, $groupped);
print_r($result);
输出:
Array
(
[0] => Array
(
[0] => 2016/05/04
[1] => 9
)
[1] => Array
(
[0] => 2016/05/03
[1] => 14
)
[2] => Array
(
[0] => 2016/05/02
[1] => 16
)
)
上述代码中没有“关联数组”您是否尝试过构建一种迭代方法来组合它们?@David抱歉,我不确定这是什么,您能解释一下吗?
$arrTotal
中的最后一个元素应该是[2016/05/02,16]
,不是吗?谢谢!我需要索引数组,但我相信我能想出如何将它们转换为索引数组。欢迎!)好吧这只是功能上的一个小调整,祝你好运!