【问题标题】:How do I pass same number rows to Google Charts API with data from Analytics API如何使用来自 Analytics API 的数据将相同的行数传递给 Google Charts API
【发布时间】:2016-09-01 20:16:17
【问题描述】:

我正在尝试从 Analytics API 获取一些数据,然后使用 Google Charts API 将其显示为区域图。

以下数组包含来自 Analytics API v4 的两天的数据。屏幕截图显示了数据如何在查询资源管理器的表中返回/呈现。

<?php
    $results = [
      0 => 
      [
        'dimensions' => 
        [
          0 => 'Organic Search',
          1 => '20160831',
        ],
        'metrics' => 
        [
          0 => 
          [
            'values' => 
            [
              0 => '13',
              1 => '0',
              2 => '0.0',
            ],
          ],
        ],
      ],
      1 => 
      [
        'dimensions' => 
        [
          0 => 'Social',
          1 => '20160830',
        ],
        'metrics' => 
        [
          0 => 
          [
            'values' => 
            [
              0 => '7',
              1 => '0',
              2 => '0.0',
            ],
          ],
        ],
      ],
      2 => 
      [
        'dimensions' => 
        [
          0 => 'Organic Search',
          1 => '20160830',
        ],
        'metrics' => 
        [
          0 => 
          [
            'values' => 
            [
              0 => '6',
              1 => '0',
              2 => '0.0',
            ],
          ],
        ],
      ],
      3 => 
      [
        'dimensions' => 
        [
          0 => 'Social',
          1 => '20160831',
        ],
        'metrics' => 
        [
          0 => 
          [
            'values' => 
            [
              0 => '6',
              1 => '0',
              2 => '0.0',
            ],
          ],
        ],
      ],
      4 => 
      [
        'dimensions' => 
        [
          0 => 'Referral',
          1 => '20160831',
        ],
        'metrics' => 
        [
          0 => 
          [
            'values' => 
            [
              0 => '3',
              1 => '0',
              2 => '0.0',
            ],
          ],
        ],
      ],
      5 => 
      [
        'dimensions' => 
        [
          0 => 'Referral',
          1 => '20160830',
        ],
        'metrics' => 
        [
          0 => 
          [
            'values' => 
            [
              0 => '2',
              1 => '0',
              2 => '0.0',
            ],
          ],
        ],
      ],
      6 => 
      [
        'dimensions' => 
        [
          0 => 'Direct',
          1 => '20160830',
        ],
        'metrics' => 
        [
          0 => 
          [
            'values' => 
            [
              0 => '1',
              1 => '0',
              2 => '0.0',
            ],
          ],
        ],
      ],
    ];

?>

我正在尝试将 30 天的默认渠道分组和会话数据绘制到面积图中。图表接受的数据格式如下:

[
  [
    {
      "label": "Day",
      "id": "day"
    },
    {
      "label": "Organic Search",
      "id": "organic_search",
      "type": "number"
    },
    {
      "label": "Referral",
      "id": "referral",
      "type": "number"
    },
    {
      "label": "Social",
      "id": "social",
      "type": "number"
    },
    {
      "label": "Direct",
      "id": "direct",
      "type": "number"
    }
  ],
  [
    "20160831",
    "13",
    "3",
    "0",
    "6"
  ],
  [
    "20160830",
    "1",
    "6",
    "2",
    "7"
  ]
]

这是我尝试将 API 数据放入图表数组的代码。

<?php

function getChartData($rows)
{
    // Get the unique dates
    $dates = [];
    foreach ($rows as $row) {
        $dates[] = $row['dimensions'][1];
    }
    $dates = array_unique($dates);

    // get the uniqe dimensions
    $dimensions = [];
    foreach ($rows as $row) {
        $dimensions[] = $row['dimensions'][0];
    }
    $dimensions = array_unique($dimensions);

    // Put all the values and the dimension filtered by date
    $values = [];
    foreach ($dates as $date) {
        foreach ($rows as $row) {
            if ($date == $row['dimensions'][1]) {
                $val = $row['metrics'][0]['values'];
                array_push($val, $row['dimensions'][0]);
                array_unshift($val, $date);
                $values[] = $val;
            }
        }
    }

    // Group the sessions metric value by date
    $chartValues = [];
    foreach ($dates as $date) {
        $val = [];
        foreach ($values as $value) {
            if ($date == $value[0]) {
                $val[] = $value[1];
            }
        }
        array_unshift($val, $date);
        $chartValues[] = $val;
    }

    return $chartValues;
}

我遇到的问题是 API 并不总是每天返回完全相同数量的渠道分组。

例如,8 月 31 日没有直接的流量会话数据。当它按原样传递给图表时,它会失败,因为它总是期望值总是在数组中具有相同数量的项目。

如果缺少任何渠道分组会话数据,我如何添加一个空值,以便面积图数组每天接收相同数量的值?

【问题讨论】:

    标签: php arrays google-analytics google-visualization google-analytics-api


    【解决方案1】:

    尝试使用null

            if ($date == $row['dimensions'][1]) {
                $val = $row['metrics'][0]['values'];
                array_push($val, $row['dimensions'][0]);
                array_unshift($val, $date);
                $values[] = $val;
            } else {
                $val = null;
                array_push($val, $row['dimensions'][0]);
                array_unshift($val, $date);
                $values[] = $val;
            }
    

    【讨论】:

    • 试过了,但它也不喜欢空值。所以想出了一个不同的解决方案,我已经发布了供参考。
    【解决方案2】:

    如果有人遇到同样的问题,我就是这样做的:

    <?php
    
    function getAreaChartValues($response) 
    {
        // Get the rows of the response
        $rows = $response->toSimpleObject()->reports[0]['data']['rows'];
    
        $dimensions = [];
    
        $results = [];
        foreach ($rows as $row) {
    
            // Add all the dimensions to the dimensions array
            $dimensions[] = $row['dimensions'][0];
    
            $date = isset($row['dimensions'][1]) ? $row['dimensions'][1] : '';
            $ValueType = $row['dimensions'][0];
            $value = $row['metrics'][0]['values'][0];
    
            if (!isset($results[$date])) {
                $results[$date] = [];
            }
    
            $results[$date][$ValueType] = $value;
        }
    
        ksort($results);
    
        $dimensions = array_unique($dimensions);
    
        // Check for any non existant value for a dimension 
        // And add empty values
        foreach ($dimensions as $dimension) {
            foreach ($results as &$result) {
                if (!array_key_exists($dimension, $result)) {
                    $result[$dimension] = 0;
                }
                ksort($result);
            }
        }
    
        return $results;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-07
      • 2018-04-04
      • 2012-03-25
      • 2021-01-23
      • 2023-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多