【问题标题】:How to force an array to display all the values?如何强制数组显示所有值?
【发布时间】:2012-10-25 23:35:09
【问题描述】:

在 print_r($segments) 之后,我的数组的输出与此类似:

Array
(
    [kind] => analytics#segments
    [username] => account@gmail.com
    [totalResults] => 2334
    [startIndex] => 1
    [itemsPerPage] => 1000
    [items] => Array
    (
        [0] => Array
            (
                [id] => -1
                [kind] => analytics#segment
                [selfLink] => https://www.googleapis.com/analytics/v3/management/segments/gaid::-1
                [segmentId] => gaid::-1
                [name] => All Visits
                [definition] => 
            )
...

        [999] => Array
            (
                [id] => -1
                [kind] => analytics#segment
                [selfLink] => https://www.googleapis.com/analytics/v3/management/segments/gaid::-1
                [segmentId] => gaid::-1
                [name] => All Visits
                [definition] => 
            )
    )
)

这个数组是谷歌分析 API PHP 的输出,它显示的最大值是 1000 行,如 itemsPerPage 中所述em> 参数,但我确实有超过 1000 个,接近 2334 中提到的 totalResults > 参数。

有人知道如何强制它一次显示所有输出吗?

当我运行这个时:

 $nextLink = $results->getNextLink()
            ? $results->getNextLink() : 'none';

print($nextLink);

输出是一个链接https://www.googleapis.com/analytics/v3/management/accounts/~all/webproperties/~all/profiles?start-index=1001&max-results=1000

Accoring to this documentation I have to use the parameter called 最大结果 to display more results per page, but I have no idea how to do so, no much documentation about it.

知道如何使用 ma​​x-results 参数或 link 获得其余结果吗?

【问题讨论】:

  • 这不是print_r 问题 - 听起来像是 Google Analytics API 限制
  • @GabrielSantos 最好使用 API 提供的 getNextLink()getPreviousLink()。如果有 10,001 个结果,也会出现同样的问题。
  • Google 分析每个请求只允许 10.000 行。您需要有创意并在后端使用分页,在发送到用户浏览器之前将所有行(执行多个请求)存储在一个数组中。
  • @mongotop 我添加了伪代码来演示,自己无法测试,不想发布我无法测试的代码。
  • @mongotop 如果您有一些特定的代码正在尝试,但它不起作用,可以将其作为 Update 部分添加到问题中,我们会看看我们可以做到。

标签: php arrays google-analytics-api


【解决方案1】:

快速回答https://developers.google.com/analytics/devguides/reporting/core/v3/coreDevguide#working

查看分页信息,您的数据似乎应该有getNextLink()getPreviousLink(),它们可能不是数据的一部分,也不会打印在print_r() 中。

当通过网络访问 API 并且不知道 API 需要返回多少信息时,您不想冒险一次性发送大量数据。这可能会导致大量不必要的流量并减慢整个系统的速度。

一种解决方案,分页,是发回一组响应(在本例中为 1000 个),如果 API 的用户需要更多,让他们明确请求下一组。

伪代码: (抱歉,我没有可用的 Google-API 设置来尝试这个)

$finalArray = array();

//Copy $segments into $finalArray;
while(!empty($segments->getNextLink()))
{
    //Use $segments->getNextLink()
    //$segments now contains the next set of data
    //Copy $segments into $finalArray;
}

【讨论】:

  • 我从你的脚本中发布了结果,我不得不稍微修改一下,这样它就不会显示错误。但这是正确的道路!知道如何从那里去吗?谢谢克里斯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-29
  • 1970-01-01
  • 2016-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-17
相关资源
最近更新 更多