如何与多维数组相交

时间:2013-05-28 10:09:55

标签: php intersect

我正在为我的网站构建搜索引擎。我有一个索引,包含我网站页面中包含的所有单词及其位置。我正在使用php数组,搜索后返回的信息如下:

'jeff' => 
    array
      1 => 
        array
          0 => int 0
          1 => int 259
          2 => int 444
          3 => int 461
          4 => int 486
'seka'
    array
      1 => 
        array
          0 => int 1
          1 => int 260
          2 => int 445
          3 => int 462
          4 => int 487

如果我想找到杰夫的所有贴子列表,我会寻找“杰夫”作为关键;如果它存在,那么我将其插入变量,如$v=index['jeff']

这很简单,但现在如果我有一个像“jeff and seka”这样的多字符串查询呢?我如何检查它们是否存在并将它们作为不同的数组返回(一个用于jeff,另一个用于seka)所以我可以轻松地将它们相交以查找带有两个搜索字符串的文档?

1 个答案:

答案 0 :(得分:1)

编辑:在评论后重写。一些反馈会很好,看看我们是否正朝着正确的方向前进!

你看过array_intersect_key()功能了吗?你应该能够做到:

$common = array_intersect_key(index['jeff'], index['seka']);

这将为您提供一个新数组,其中只包含Jeff和Seka常用的那些页面的键(以及来自'jeff'的值)。您可以为该函数提供任意数量的附加数组,这将允许您一起搜索(例如)五个不同的术语,并仅检索包含全部五个的页面。

您的返回数组将包含每个页面的键。每个键的值将来自array_intersect_key()调用中的第一个参数(在我的示例中为“jeff”)。换句话说,返回index['jeff']数组的子集。

如果您想要检索每个页面上其他术语的位置,您可以在开始时使用不同的术语重复搜索(不要:非常低效)或循环返回结果中的键(您可以获得带有$pages = array_keys($common);)的键数组,并将其用作每个其他术语的数组的索引。