合并2个多维数组

时间:2015-12-17 21:17:36

标签: php arrays multidimensional-array

我尝试使用foreach循环在PHP上调用Google AnalyticsAPI,如下所示:

foreach($getResults as $row) {
switch($row[0]) {
    case 'New Visitor':
        $data[] = array(
            'new' => $row[2],
            'date' => date("M d", strtotime($row[1]))
        );
    break;
    case 'Returning Visitor':
        $data[] = array(
            'return' => $row[2],
            'date' => date("M d", strtotime($row[1]))
        );
    break;
}}

我有这样的结果数组:

Array (
[0] => Array
    (
        [new] => 13
        [date] => Dec 17
    )

[1] => Array
    (
        [return] => 8
        [date] => Dec 17
    )

[2] => Array
    (
        [new] => 11
        [date] => Dec 16
    )

[3] => Array
    (
        [return] => 3
        [date] => Dec 16
    ) )

但我想将两个上面的每个数组合并在一起,并给出如下输出:

Array (
[0] => Array
    (
        [new] => 13
        [return] => 8
        [total] => 21
        [date] => Dec 17
    )

[2] => Array
    (
        [new] => 11
        [return] => 3
        [total] => 14
        [date] => Dec 16
    ))

我已经尝试使用array_merge()并使用+运算符进行组合,但它没有像我所想的那样给我结果,任何人都可以帮助我?

2 个答案:

答案 0 :(得分:1)

如果您想将日期用作数组键,则可以。 然后为总数'密钥,您可以先检查是否已经存在'总计'键。如果没有,请添加第一个条目。如果已有,则添加到其中。

例如,如果$getResults看起来像这样:

$getResults = array(
    array(
        'New Visitor',
        '12/17/2015',
        13
    ),
    array(
        'Returning Visitor',
        '12/17/2015',
        8
    ),
    array(
        'New Visitor',
        '12/16/2015',
        11
    ),
    array(
        'Returning Visitor',
        '12/16/2015',
        3
    )
);

也许这样的设置可以帮到你:

$data = array();

foreach ($getResults as $row) {
    $date = date("M d", strtotime($row[1]));
    isset($data[$date]['total']) ? $data[$date]['total'] += $row[2] : $data[$date]['total'] = $row[2];
    $data[$date]['date'] = $date;
    switch ($row[0]) {
        case 'New Visitor':
            $data[$date]['new'] = $row[2];
            break;
        case 'Returning Visitor':
            $data[$date]['return'] = $row[2];
            break;
    }
}

print_r($data);

// If you don't want the 'date' as a key, you can use:
// $data = array_values($data);

将导致:

Array
(
    [Dec 17] => Array
        (
            [total] => 21
            [date] => Dec 17
            [new] => 13
            [return] => 8
        )

    [Dec 16] => Array
        (
            [total] => 14
            [date] => Dec 16
            [new] => 11
            [return] => 3
        )

)

答案 1 :(得分:0)

您可以使用公用密钥名称:

$data['YOUR_COMMON_KEY'] = array(
    'new' => $row[2],
    'date' => 'Dec 17'
);

您可以像密钥一样使用date值。迭代$getResults后,你应该得到一个多维数组,但没有数字键。因此,如果您想获得数字数组,只需使用array_values()