Суммирование значений одного и того же ключа в массиве - Facebook Graph API - PullRequest
0 голосов
/ 26 февраля 2012

Кто-нибудь знает решение этой проблемы?

Я бы хотел отобразить сумму различных значений с помощью PHP.Что-то вроде:

Пост страницы: (Сумма всего)

Фанат: (Сумма всего)

Сообщение пользователя: (Сумма всего)

....

Вот форма JSON в Facebook Graph APi.

{
  "data": [
    {
      "id": "SOME_ID/insights/page_stories_by_story_type/days_28", 
      "name": "page_stories_by_story_type", 
      "period": "days_28", 
      "values": [
        {
          "value": {
            "page post": 357, 
            "fan": 229, 
            "user post": 84, 
            "question": 72, 
            "mention": 4
          }, 
          "end_time": "2012-01-22T08:00:00+0000"
        }, 
        {
          "value": {
            "page post": 356, 
            "fan": 229, 
            "user post": 85, 
            "question": 73, 
            "mention": 4
          }, 
          "end_time": "2012-01-23T08:00:00+0000"
        }, 
        {
          "value": {
            "page post": 401, 
            "fan": 231, 
            "user post": 88, 
            "question": 73, 
            "mention": 4
          }, 
          "end_time": "2012-01-24T08:00:00+0000"
        }, 

      ], 
      "title": "28 Days Page Stories by story type", 
      "description": "28 Days The number of stories about your Page by story type. (Total Count)"
    }
  ], 
  "paging": {
    "previous": "https://SOME_LINK", 
    "next": "https://SOME_LINK"
  }
}

1 Ответ

0 голосов
/ 26 февраля 2012

Я не уверен, почему, но предоставленный вами json не декодируется с использованием стандарта json_decode, поэтому мне пришлось использовать пользовательскую функцию, найденную в http://php.net/manual/en/function.json-decode.php

Это код:

function jsonDecode($json) {
$comment = false;
$out = '$x=';

for ($i = 0; $i < strlen($json); $i++) {
    if (!$comment) {
        if (($json[$i] == '{') || ($json[$i] == '['))
            $out .= ' array(';
        else if (($json[$i] == '}') || ($json[$i] == ']'))
            $out .= ')';
        else if ($json[$i] == ':')
            $out .= '=>';
        else
            $out .= $json[$i];
    }
    else
        $out .= $json[$i];
    if ($json[$i] == '"' && $json[($i - 1)] != "\\")
        $comment = !$comment;
 }
 eval($out . ';');
 return $x;
}

// decode the JSON result
$result = jsonDecode($json);

$values = $result['data'][0]['values'];

$total_values = array();

// loop through the returned values to compute the sum for each property
foreach ($values as $item) {
   foreach ($item['value'] as $key => $value) {
       if (isset($total_values[$key])) {
           $total_values[$key] += $value;
       } else {
           $total_values[$key] = $value;
       }
   }
}

print_r($total_values);

Результат примерно такой:

Array
(
    [page post] => 1114
    [fan] => 689
    [user post] => 257
    [question] => 218
    [mention] => 12
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...