我使用以下方法从Facebook Graph API获取我管理的所有帐户的最近3个月页面浏览量信息:
$since_date = date('Y-m-d', strtotime('-3 months'));
$until_date = date('Y-m-d');
$page_views = $facebook->api('/' . $account['id'] . '/insights/page_views?since=' . $since_date . '&until=' . $until_date . '','GET');
之后我使用php foreach循环(实际上是两个)以所需格式(数组)获取所需信息(页面视图和日期),如下所示:
foreach ($page_views['data'] as $page_view) {
$i = 0;
$len = count($page_view['values']);
foreach($page_view['values'] as $key => $page_view_values) {
$end_time = strval($page_view_values['end_time']);
$value = intval($page_view_values['value']);
echo '[\'' . substr($end_time, 0, -14) . '\', ' . $value . ']';
if ($i == $len - 1) {
continue;
} else {
echo ', ';
}
$i++;
}
哪个输出还需要以下数组:
(.....],['2013-04-02', 21], ['2013-04-03', 7], ['2013-04-04', 2], ['2013-04-05', 0], ['2013-04-06', 2], ['2013-04-07', 3], ['2013-04-08', 1], ['2013-04-09', 2], ['2013-04-10', 5], ['2013-04-11', 1], ['2013-04-12', 11], ['2013-04-13', 0],[.....)
使用上面的数组,所有工作都应该正常工作。我渲染了一个非常漂亮的图表,但如果我可以根据一周中的几天我想过滤它。例如:我想要一个像上面那样的数组,只有星期一或星期二的日期等等......我需要在第二个php foreach中的某个地方过滤,只返回我想要的日子但是如何?这种需求用于什么条件?或者我应该使用其他方法,例如,从Facebook Graph Api查询其他内容?任何指导都非常受欢迎。
答案 0 :(得分:0)
你可以根据工作日的3个字母代码做一个开关案例,并为每一天做这样的事情:
$tempDate = '2012-07-10';
echo date('D', strtotime( $tempDate));
输出:星期二
这将允许您按工作日过滤。例如,如果工作日代码为Tue,则只会添加到数组中。所有其他人都将被跳过。
添加@arraintxo注意:
date('N', strtotime($tempDate))
将返回工作日的数值(1到7,1是星期一和7星期日),更容易比较。
答案 1 :(得分:0)
我建议使用类似于当前回复的内容,稍作调整:
$first=false; $cache=array(); $conv=new \Date('2000-01-01T00:00:00Z');
foreach ($page_views['data'] as $page_view) {
foreach($page_view['values'] as $key => $page_view_values) {
$end_time = strval($page_view_values['end_time']);
$ds=substr($end_time, 0, -14);
$value = intval($page_view_values['value']);
if(!isset($cache[$ds])
$cache[$ds]=(int)$conv->modify($ds)->format('N');
if($first){ echo ', '; $first=false; }
echo '[\'' . $ds . '\', ' . $value . ', '.$cache[$ds].']';
}
}
日期索引现在作为数组的第三项出现。注意1:使用缓存,以便您只查看每个日期一次。注意2:使用bool不添加前导分隔符比从计数减少要便宜得多,而计数反过来比计算到数量更便宜(你在第一时间做了什么)。注意3:这会一次又一次地修改$ conv对象,因为我不喜欢创建很多对象,这应该至少与过程样式(date()和strtotime())一样好。
答案 2 :(得分:0)
首先,我要感谢大家的快速回复,这是一个很大的帮助,我非常感激。根据您的指导原则,我以下列方式解决了我的“问题”:
$since_date = date('Y-m-d', strtotime('-3 months'));
$until_date = date('Y-m-d');
$page_views = $facebook->api('/' . $account['id'] . '/insights/page_views?since=' . $since_date . '&until=' . $until_date . '','GET');
foreach ($page_views['data'] as $page_view) {
$i = 0;
foreach($page_view['values'] as $key => $page_view_values) {
$end_time = strval($page_view_values['end_time']);
$ds = substr($end_time, 0, -14);
$value = intval($page_view_values['value']);
if (date('N', strtotime($ds)) != 1) {
continue;
} else {
if ($i==1) {
echo ', ';
}
$i=1;
echo '[\'' . $ds . '\', ' . $value . ']';
}
}
}
我可以使用date('N', strtotime($ds))
作为当天的相应数字,为一周中的每一天执行此操作。我收到了我想要的数组,但如果可以的话,我想知道是否可以对名为$page_view_values['value']
的变量中的数字求和(我想在一周中的天数之间进行比较)。