如何在一个搜索/结果函数中集成多个API

时间:2014-02-10 17:25:10

标签: php laravel

有2种不同的API有2个不同的数据库,但目录类似的对象(音乐艺术家)。他们提供不同类型的信息,我想将它们集成到我们网站的一个个人资料页面中。

然而,问题是找到属于两个API的单个艺术家的主键。这样做的最佳做法是什么?我有几种方法:

  1. 基于相关性 用户提交搜索词。搜索在两个API上完成,并返回每个结果集合。将一个集合与另一个集合进行比较,如果有匹配则将它们添加到新阵列中。
  2. 返回的视图将提供与搜索字词相比的潜在艺术家资料的链接。如果特定艺术家在两个API上都有返回的信息,那么他们的URL将如下所示:

    website.com/artist/profile/{API1-primary-ID}/{API2-primary-ID}
    

    然后,此路线将根据各自的ID提取每位艺术家的详细信息。

    但是,如果从第一个阵列到第二个阵列没有匹配,则此Artist Profile链接的URL将如下所示:

    website.com/artist/profile/{API1-primary-ID}/0
    

    在控制器中,如果第二个参数为0,则会显示相应的视图,仅显示第一个API的信息。

    当我说我有不同的方法解决这个问题时,我有点撒了谎。输入所有这些后,这是我的情况最好的一个。我想我现在的问题是,PHP或Laravel中是否已有一个模块可以比较匹配的数组或字符串?

1 个答案:

答案 0 :(得分:1)

Laraval有ton of helpers用数组做很多事情。如果您可以将两个结果集作为Eloquent Collections,则可以使用许多非常方便的方法来比较intersect()等集合。您可以查看收集功能here的完整列表。

作为一个快速提示,如果你的结果是一个关联数组,你可以通过这样做把它们变成一个Eloquent Collection:

$myArray = array('artist' => 'Garth Brooks', 'category' => 'Country'); 
$myCollection = Collection::make($myArray);

如果它们是JSON并且您json_decode()将其转换为对象,则可以使用get_object_vars()将其转换为关联数组并将其提供给Collection::make()方法。

希望能为您提供有关如何处理数据的一些想法。