按密钥解析和排序多个Facebook json供稿

时间:2017-04-26 21:55:53

标签: php arrays json facebook sorting

我试图获取多个Facebook Feed并按时间顺序显示

json Feed中的所有对象都有" created_time"所以我想用它作为一个键来按时间顺序解析和显示所有对象,而不管它们来自哪个源

继承我的代码

$urls = array(
//FEED1
'https://graph.facebook.com/GROUP_ID/posts?fields=message,full_picture,description,link,picture,source,name,type,status_type,caption,created_time,permalink_url&limit=10&access_token=ACCESS_TOKEN',
//FEED 2
'https://graph.facebook.com/PAGE_ID/posts?fields=message,full_picture,description,link,picture,source,name,type,status_type,caption,created_time,permalink_url&limit=10&access_token=ACCESS_TOKEN',
//FEED 3
'https://graph.facebook.com/GROUP_ID/posts?fields=message,full_picture,description,link,picture,source,name,type,status_type,caption,created_time,permalink_url&limit=10&access_token=ACCESS_TOKEN');

$results = array();

然后我做

foreach($urls as $index => $url){
$DataContent = file_get_contents($url);
$infoData = json_decode($DataContent, true);

foreach ($infoData['data'] as $Data){
    $FBPostCreatedTime = $Data['created_time'];

    /*PARSE THE DATA HERE*/
    }
}

此代码的结果逐个输出每个Feed,

如何使用$ FBPostCreatedTime合并所有Feed数据并按时间顺序显示?

由于

2 个答案:

答案 0 :(得分:0)

我不清楚你想做什么,但是,我假设您想按日期或时间对数组进行排序。这就是我改变代码中foreach()循环的方法:

$NewData = array(); // Will hold an altered array. 

foreach ($infoData['data'] as $Data) {

    $NewData[$Data['created_time']] = $Data;
}

ksort($NewData);

$NewData将是一个关联数组,它使用created_time中的$Data值作为每行数据的键名。在此阵列上运行ksort()将使用此键对数组进行排序。您也可以使用krsort()反向排序数组键。

这假设created_time被格式化为SQL日期字符串:YYYY-MM-DD HH:MM:SS,例如:2017-04-26 14:30:00

答案 1 :(得分:0)

在大多数情况下使用created_time作为数组键可能会很好,但是如果有多个帖子具有created_time的相同值,则后续帖子将覆盖现有值在那把钥匙上。为了避免这种可能性,您可以将所有帖子附加到一个数组

foreach ($infoData['data'] as $Data) {
    $allPosts[] = $Data;
}

然后在外部 foreach循环结束后,usort结果。

usort($allPosts, function($a, $b) {
    return $a['created_time'] <=> $b['created_time'];
});