2016-11-16 104 views
0

我有2个不同的阵列:合并时阵列计数相同的键 - 值对的第一对总和 - PHP

阵列1:

array(5) { 
    [0]=> 
    array(2) { 
    ["all_totals"]=> 
    string(1) "3" 
    ["month_name"]=> 
    string(3) "Jul" 
    } 
    [1]=> 
    array(2) { 
    ["all_totals"]=> 
    string(2) "20" 
    ["month_name"]=> 
    string(3) "Aug" 
    } 
    [2]=> 
    array(2) { 
    ["all_totals"]=> 
    string(2) "10" 
    ["month_name"]=> 
    string(3) "Sep" 
    } 
    [3]=> 
    array(2) { 
    ["all_totals"]=> 
    string(2) "14" 
    ["month_name"]=> 
    string(3) "Oct" 
    } 
    [4]=> 
    array(2) { 
    ["all_totals"]=> 
    string(3) "102" 
    ["month_name"]=> 
    string(3) "Nov" 
    } 
} 

阵列2:

array(2) { 
    [0]=> 
    array(2) { 
    ["all_totals"]=> 
    string(1) "9" 
    ["month_name"]=> 
    string(3) "Oct" 
    } 
    [1]=> 
    array(2) { 
    ["all_totals"]=> 
    string(2) "30" 
    ["month_name"]=> 
    string(3) "Nov" 
    } 
} 

为了加入它们并且只有一个foreach循环,我合并它们:

$result = array_merge($array1, $array2); 
foreach($result as $item){ 
    //my actions here 
} 

但是,你如何注意到我在两个数组中都有相同的key =>值对。唯一的区别是["all_totals"]的值。例如,

["all_totals"]=>"14", ["month_name"]=> "Oct"
["all_totals"]=> "9", ["month_name"]=> "Oct"

当合并我要检查是否有这样的键 - 值对,并通过具有一个这样的元素,但总和[“all_totals”]的值,使得加入它们我不会丢失任何数据。因此,在最终的结果,我将有一个这样的元素:

["all_totals"]=>"23", ["month_name"]=> "Oct"

任何想法?

+0

[PHP?:合并两个数组,同时保持键,而不是重新索引的]的可能的复制(http://stackoverflow.com/questions/3292044/php-merge -two-arrays-while-keeping-keys-instead-of-reindexing) –

+0

我的问题与你链接的不同@MasivuyeCokile – aidadev

回答

1

什么这样罗马:

$coll=array(); 
foreach(array($arr,$arr2) as $array){ 
foreach($array as $a){ 
    if(!isset($coll[$a['month_name']])){ 
    $coll[$a['month_name']]=$a; 
    } else { 
    $coll[$a['month_name']]['all_totals'] += $a['all_totals']; 
    } 
} 
} 
ksort($coll); 
print_r(array_values($coll)); 
+0

谢谢,我刚刚删除了ksort(),因为我已经在我的sql查询中对它们进行了排序。非常感谢@JustOnUnderMillions – aidadev

相关问题