2012-03-07 3 views
0

Кто-нибудь знает, как получить количество вхождений «фото» и «статус»? Я попытался вывести его как строку и выполнить substr_count, но не повезло.PHP - подсчет строк в массиве

Array ([0] => [1] => photo) 
Array ([0] => [1] => photo) 
Array ([0] => [1] => status) 
Array ([0] => [1] => photo) 
Array ([0] => [1] => photo) 
Array ([0] => [1] => photo) 
Array ([0] => [1] => status) 
Array ([0] => [1] => photo) 
Array ([0] => [1] => status) 
Array ([0] => [1] => status) 
Array ([0] => [1] => photo) 
Array ([0] => [1] => status) 
Array ([0] => [1] => status) 
Array ([0] => [1] => photo) 
Array ([0] => [1] => status) 
Array ([0] => [1] => status) 
Array ([0] => [1] => photo) 
Array ([0] => [1] => photo) 
Array ([0] => [1] => status) 
Array ([0] => [1] => status) 
Array ([0] => [1] => status) 
Array ([0] => [1] => link) 
Array ([0] => [1] => status) 

оригинальный JSON код из API Facebook Graph является:

{ 
    "data": [ 
    { 
     "id": "123", 
     "from": { 
     "name": "Some Name", 
     "category": "Food/beverages", 
     "id": "123" 
     }, 
     "picture": "a pic", 
     "link": "a link", 
     "name": "bla bla ", 
     "caption": "9 new photos", 
     "icon": "a icon", 
     "actions": [ 
     { 
      "name": "Comment", 
      "link": "a link" 
     }, 
     { 
      "name": "Like", 
      "link": "a link" 
     } 
     ], 
     "privacy": { 
     "description": "Public", 
     "value": "EVERYONE" 
     }, 
     "type": "photo", 
     "object_id": "232342", 
     "created_time": "2012-03-01T14:58:53+0000", 
     "updated_time": "2012-03-02T14:12:50+0000", 
     "likes": { 
     "data": [ 
      { 
      "name": "a name", 
      "id": "1234423" 
      } 
     ], 
     "count": 58 
     }, 
     "comments": { 
     "data": [ 
      { 
      "id": "234234", 
      "from": { 
       "name": "a name", 
       "id": "23423234" 
      }, 
      "message": "message bla bla", 
      "created_time": "2012-03-02T13:42:48+0000", 
      "likes": 2 
      }, 
      { 
      "id": "234234234", 
      "from": { 
       "name": " a name", 
       "category": "Food/beverages", 
       "id": "123" 
      }, 
      "message": "asfd", 
      "created_time": "2012-03-02T14:12:50+0000" 
      } 
     ], 
     "count": 15 
     }, 
     "is_published": true 
    }, 
    { 
     "id": "123123", 
     "from": { 
     "name": "name", 
     "category": "Food/beverages", 
     "id": "123" 
     }, 
     "message": "sadfasfd", 
     "actions": [ 
     { 
      "name": "Comment", 
      "link": "a link" 
     }, 
     { 
      "name": "Like", 
      "link": "a link" 
     } 
     ], 
     "privacy": { 
     "description": "Public", 
     "value": "EVERYONE" 
     }, 
     "type": "status", 
     "created_time": "2012-03-01T09:49:40+0000", 
     "updated_time": "2012-03-01T17:00:53+0000", 
     "likes": { 
     "data": [ 
      { 
      "name": "name", 
      "id": "1000" 
      } 
     ], 
     "count": 17 
     }, 
     "comments": { 
     "data": [ 
      { 
      "id": "1404", 
      "from": { 
       "name": "name", 
       "id": "1000" 
      }, 
      "message": "bla bla", 
      "created_time": "2012-03-01T11:41:53+0000", 
      "likes": 2 
      }, 
      { 
      "id": "1404781", 
      "from": { 
       "name": "name", 
       "id": "142" 
      }, 
      "message": "message adsafasd", 
      "created_time": "2012-03-01T17:00:53+0000" 
      } 
     ], 
     "count": 9 
     }, 
     "is_published": true 
    }, 

я выполняю json_decode с выходом JSON, а затем проходным, как эти данные

Еогеасп ($ page_posts_overview-> в $ page_posts_overview_output) {

$type = " ".$page_posts_overview_output->type; 
$type = explode(" ", $type); 

$type = array($type); 

print_r ($type);// this is what the output posted above 

}

+1

Какова исходная структура массива? – zerkms

+0

Hi @zerkms оригинальный выход можно найти здесь: https://graph.facebook.com/FANPAGEID/posts?since=2012-01-02&until=2012-03-02 разрешения нужны, но вы можете легко просмотреть это в графике api explorer (https://developers.facebook.com/tools/explorer/) –

+0

, если вы хотите, чтобы ваша проблема была решена - вам нужно предоставить столько информации, сколько необходимо. Если вы не хотите показывать фактическую структуру массива - никто не будет. – zerkms

ответ

3

Я думаю, что вы должны были бы перебрать массив вручную и сохранить подсчет количества раз каждое слово показывает вверх:

function count_words($fb_array) { 

    $keywords = array(); 

    foreach($fb_array as $element) { 
    $word = $element[1]; 
    if (!array_key_exists($keywords, $word)) { 
     $keywords[$word] = 0; 
    } 
    $keywords[$word]++; 
    } 

    return $keywords; 
} 

print_r($keywords); 

Если у вас есть массив ключевых слов в $fb_array, $keywords теперь должен содержать счетчик для каждого слова.

+0

+1. Вы должны преобразовать этот фрагмент в функцию. –

+0

Yessir. Это сделано :-) – rjz

+0

Привет @rjz, спасибо за мил за это, но, к сожалению, он ничего не печатает. Вот мой код: данные как $ page_posts_overview_output) { $ type = "". $ Page_posts_overview_output-> type; $ type = explode ("", $ type); $ type = array ($ type); print_r ($ type); // это то, что вывел выше } function count_words ($ type) { $ keywords = array(); foreach ($ type as $ element) { $ word = $ element [1]; if (! Array_key_exists ($ keywords, $ word)) { $ keywords [$ word] = 0; } $ ключевые слова [$ word] ++; } return $ keywords; } print_r ($ keywords); ?> –

1
$a = array(...); // your Facebook data 
$b = array(); 
foreach ($a as $e) { 
    $b[] = $e[1]; 
} 
$c = array_count_values($b); 
var_dump($c) 

http://www.php.net/manual/en/function.array-count-values.php

+0

спасибо за это. Будет ли $ b строка (т.е.e статус)? –

+0

О, извините, это ошибка. В конце скрипта $ c будет содержать массив вхождений для каждой строки. –

Смежные вопросы