0

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 ループ (実際には 2 つ) を使用して、次のような必要な形式 (配列) で必要な情報 (ページ ビューと日付) を取得しています。

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],[.....)

上記の配列で、すべてが正常に機能しています。私は非常に素晴らしいチャートをレンダリングしますが、曜日に基づいてフィルタリングできる場合はそれをフィルタリングしたいと考えています。例: 月曜日または火曜日などの日付のみを含む上記のような配列が必要です... 2 番目の php foreach のどこかでフィルター処理して、必要な日のみを返す必要がありますが、どのように? この種のニーズにはどのような条件が使用されますか? または、他の方法を使用する必要があります。たとえば、Facebook Graph Api から別のクエリを実行する必要がありますか? どんなガイダンスも大歓迎です。

4

3 に答える 3

0

たとえば、曜日の 3 文字のコードに基づいてケースを切り替え、次のように曜日ごとに行うことができます。

$tempDate = '2012-07-10';
echo date('D', strtotime( $tempDate));

出力されます:

これにより、曜日でフィルタリングできます。たとえば、平日のコードが火曜日の場合にのみ配列に追加します。他のすべてはスキップされます。

@arraintxo メモを追加:

date('N', strtotime($tempDate))

曜日の数値 (1 から 7、1 は月曜日、7 は日曜日) を返し、比較しやすくなります。

于 2013-04-16T15:41:29.063 に答える
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].']';
  }
}

日のインデックスは、配列の 3 番目の項目として表示されます。注意 1: キャッシュが使用されるため、すべての日付を 1 回だけ検索します。注意 2: bool を使用して先行セパレーターを追加しないことは、カウントからカウントダウンするよりもはるかに安価であり、カウントアップするよりも安価です (最初に行ったこと)。注意 3: 私は多くのオブジェクトを作成するのが好きではないので、これは $conv オブジェクトを何度も変更します。これは、少なくとも手続き型スタイル (date() および strtotime()) と同様に実行する必要があります。

于 2013-04-16T16:05:54.360 に答える