合并Twitter和Instagram API结果和按日期排序


Merge Twitter and Instagram API Results and Order by Date

我正在使用https://github.com/J7mbo/twitter-api-phpTwitter API PHP包装器和https://github.com/cosenary/Instagram-PHP-API#authenticate-user-oauth2 Instagram API PHP包装,两者都按我的预期运行并显示结果。然而,我希望完成的是将这两个结果合并,按日期排序,从最新到最旧,并以砖石的方式展示。我的PHP不是最强的,所以我真的只是在寻找指导,让我走上正确的道路。现在的代码非常基本,基本上是几个foreach循环,一个用于Instagram,另一个用于Twitter。大部分工作由包装器通过传递适当的密钥/令牌来处理。

对于Twitter,每条推文都有"created_at",这是返回的第一条数据:

[ { "created_at":"Wed Mar 18 19:33:49 +0000 2015"

然后,基于我正在使用的包装器,我可以通过以下操作在foreach循环中访问它:

$tweetDate = date('F j, Y', strtotime($tweets->created_at));

Instagram使用created_time,基于包装器,我可以使用访问它

echo date('F j, Y', $entry->created_time);

希望这能有所帮助,但如果你想看更多,请告诉我。

您没有粘贴数据样本,但由于您提到了foreach循环,我假设您有两个要合并和排序的结果数组…

对于合并嵌套数组,您需要array_merge_recursive($array1, $array2)array_replace_recursive($array1, $array2)。两者的区别在于它们如何处理两个数组中的重复键:array_merge_recursive()将保留嵌套数组中重复键的两个值,其中array_replace_recursive()将用$array2中的重复密钥值覆盖$array1的值。

例如:

$array1 = ['key1' => 'original value', 'key2' => 'value2'];
$array2 = ['key1' => 'overlapped value', 'key3' => 'value3'];
$mergeResult = array_merge_recursive($array1, $array2);
$replaceResult = array_replace_recursive($array1, $array2);

$mergeResult看起来是这样的:

[
    'key1' => [
        'original value', 
        'overlapped value'
    ],
    'key2' => 'value2',
    'key3' => 'value3'
]

$replaceResult将如下所示:

[
    'key1' => 'overlapped value',
    'key2' => 'value2',
    'key3' => 'value3'
]

这取决于你的申请哪一个更合适。

如果您使用的是嵌套数组,那么要对合并后的数组进行排序,您需要使用usort()。这里有一个简化的例子,假设您想要排序的值在嵌套数组中有1级深:

function sortByDate($a, $b) {
    return $a['date'] - $b['date'];
}
usort($array1, 'sortByDate');

以下是array_marge_recurive、array_replace_recurive和usort的文档。

我假设两个API调用的结果都包含一些可用于对数据进行排序的日期键/值。您可以将结果合并到data变量(数组)中,然后使用:

function dateSort($a, $b)
{
    return strtotime($a) >= strtotime($b);
}
usort($data, "dateSort");

data的格式应该类似于这个

Array
(
    [0] => '2015-04-09',
    [1] => '2015-03-15',
    [2] => '2015-04-06'
)

输出将是

Array
(
    [0] => '2015-03-15',
    [1] => '2015-04-06',
    [2] => '2015-04-09'
)