【问题标题】:Merge Twitter and Instagram API Results and Order by Date合并 Twitter 和 Instagram API 结果并按日期排序
【发布时间】:2015-04-09 03:38:36
【问题描述】:

我正在使用https://github.com/J7mbo/twitter-api-php Twitter 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);

希望对您有所帮助,但如果您想了解更多信息,请告诉我。

【问题讨论】:

    标签: php twitter instagram instagram-api


    【解决方案1】:

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

    对于合并嵌套数组,您需要array_merge_recursive($array1, $array2)array_replace_recursive($array1, $array2)。两者之间的区别在于它们如何处理两个数组中的重复键:array_merge_recursive() 将保留嵌套数组中重复键的两个值,而array_replace_recursive() 将用@987654330 中的值覆盖$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_merge_recursivearray_replace_recursiveusort 的文档。

    【讨论】:

    • 对不起,我没有给出数据的例子。对于 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); 希望对您有所帮助,但如果您想了解更多信息,请告诉我。谢谢!
    【解决方案2】:

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

    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'
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多