PHP - 如何将3个不同的数组合并为一个

时间:2015-02-02 13:00:07

标签: php arrays

所以我有3种不同(但它们有一些相似之处),我想将这些结合起来进行一些计算

Array
(
    [0] => Array
        (
            [0] => Agent
            [1] => Answered
            [2] => Missed
            [3] => Contribution
            [4] => Per Hour
            [5] => Total Ring Time
            [6] => Mean Ring Time
            [7] => Total Talk Time
            [8] => Mean Talk Time
            [9] => Total Wrap Time
            [10] => Mean Wrap Time
            [11] => Total Session Time
            [12] => Mean Session Time
            [13] => Number of Sessions
            [14] => % Util
            [15] => Agent Hang-Ups
            [16] => Caller Hang-Ups
            [17] => Agent Hang-Ups Percent
            [18] => Caller Hang-Ups Percent
        )

    [1] => Array
        (
            [0] => Amber
            [1] => 16
            [3] => 2.0%
            [4] => 0.2
            [5] => 28.6
            [6] => 1.8
            [7] => 1861.1
            [8] => 116.3
            [9] => 0.0
            [10] => 0.0
            [11] => 234862.2
            [12] => 3403.8
            [13] => 69.0
            [14] => 0.8%
            [15] => 10
            [16] => 6
            [17] => 62.5%
            [18] => 37.5%
        )

    [2] => Array
        (
            [0] => Amie
            [1] => 106
            [3] => 13.5%
            [4] => 3.0
            [5] => 721.7
            [6] => 6.8
            [7] => 12268.0
            [8] => 115.7
            [9] => 0.0
            [10] => 0.0
            [11] => 127011.0
            [12] => 6350.5
            [13] => 20.0
            [14] => 9.7%
            [15] => 54
            [16] => 52
            [17] => 50.9%
            [18] => 49.1%
        )
)

数组2

Array
(
    [0] => Array
        (
            [0] => Agent
            [1] => Answered
            [2] => Missed
            [3] => Contribution
            [4] => Per Hour
            [5] => Total Ring Time
            [6] => Mean Ring Time
            [7] => Total Talk Time
            [8] => Mean Talk Time
            [9] => Total Wrap Time
            [10] => Mean Wrap Time
            [11] => Total Session Time
            [12] => Mean Session Time
            [13] => Number of Sessions
            [14] => % Util
            [15] => Agent Hang-Ups
            [16] => Caller Hang-Ups
            [17] => Agent Hang-Ups Percent
            [18] => Caller Hang-Ups Percent
        )
)

阵列3

[0] => Array
        (
            [0] => Agent
            [1] => Answered
            [2] => Missed
            [3] => Contribution
            [4] => Per Hour
            [5] => Total Ring Time
            [6] => Mean Ring Time
            [7] => Total Talk Time
            [8] => Mean Talk Time
            [9] => Total Wrap Time
            [10] => Mean Wrap Time
            [11] => Total Session Time
            [12] => Mean Session Time
            [13] => Number of Sessions
            [14] => % Util
            [15] => Agent Hang-Ups
            [16] => Caller Hang-Ups
            [17] => Agent Hang-Ups Percent
            [18] => Caller Hang-Ups Percent
        )

    [1] => Array
        (
            [0] => (7312
            [1] => 1
            [3] => 0.0%
            [4] => 459.8
            [5] => 0.0
            [6] => 0.0
            [7] => 0.4
            [8] => 0.4
            [9] => 0.0
            [10] => 0.0
            [11] => 7.8
            [12] => 2.6
            [13] => 3.0
            [14] => 5.5%
            [15] => 1
            [17] => 100.0%
            [18] => 0.0%
        )

    [2] => Array
        (
            [0] => Amber
            [1] => 414
            [2] => 9
            [3] => 9.3%
            [4] => 6.3
            [5] => 1880.1
            [6] => 4.4
            [7] => 65209.8
            [8] => 157.5
            [9] => 240.4
            [10] => 0.6
            [11] => 234862.2
            [12] => 3403.8
            [13] => 69.0
            [14] => 27.8%
            [15] => 290
            [16] => 124
            [17] => 70.0%
            [18] => 30.0%
        )

所以在这个例子中我有3个数组,都有相同的第一个初始数组。但是这些阵列的大小可能不同,并且它们可能不会共享相同的人。 人们也可以在不同的地方,即。

Array 1 : Common -> Amber -> Amie
Array 2 : Common -> 
Array 3 : Common -> 7312 -> Amber ->Amie

现在最终的数组看起来像

Array 4 : Common -> 7312 -> Amber -> Amie

所有数组中的所有值也应该组合在一起,即:

Amber 1st array / 1st value : 16
Amber 2nd array / 2nd value : 414

Amber final array value : 414 + 16 = 430

希望我已经提出了问题。

1 个答案:

答案 0 :(得分:1)

基本上,您总结了所有信息,删除标题。然后使用信息合并重建一个新数组。

//merge all arrays, remove the first element, it is headers.
$my_total_array = array_merge(
    array_splice($array1,1),
    array_splice($array2,1),
    array_splice($array3,1)
);

$myagents = array();
foreach($my_total_array as $agent){
    if(!isset($myagents[$agent[0]])){
         //Never met the agent, add them.
         $myagents[$agent[0]] = $agent;
    }else{
         //We already seen the agent, do maths.
         $myagents[$agent[0]][1]+=$agent[1];
         //TODO: Apply consolidation rules for other fields.
    }
}
//Put the headings back at the beggining.
array_unshift($myagents,$array1[0]);
print_r($myagents);

我希望这会有所帮助。

编辑:来自PHP文档

  

将一个或多个数组的元素合并在一起,以便显示值   一个附加到前一个的末尾。它返回   结果数组。

     

如果输入数组具有相同的字符串键,则后面的值   对于该键,将覆盖前一个。但是,如果是数组   包含数字键,后面的值不会覆盖原始   值,但会附加。