0

我使用 facebook graph api 来检索我的 facebook 帖子并将它们显示在我的网站上。

到目前为止,我已经使用此代码按标签过滤了我的帖子(此代码检索用 -fr- 标记的 FB 帖子/其他帖子用 -en- 标记:这允许我按语言对我的帖子进行排序)

      $string = $post['message'];
      $array = array("-fr-");
      if(0 < count(array_intersect(array_map('strtolower', explode(' ', $string)), $array)))

第一个问题: 我现在正在尝试根据我的语言标签加上另一个标签来检索我的帖子。

我已经绑定:

$array = array("-fr-", "#science");

但是所有包含 EITHER -fr-OR的帖子都会#science显示。我想要的是显示所有包含标签-fr-AND的帖子#science

第二个问题: 我还需要检索带有可选标签的帖子。例如,我有这些带有这些标签的帖子:

Post 1= -fr- #science #education
Post 2= -fr- #science #politics
Post 3= -fr- #science #animals

我只想检索帖子 1 和 2。

所以-fr-and#science将是强制性的,但#education#politics是一个“要么......要么......”请求(这个请求就像: array("#education", "#politics"); )

知道怎么做吗?非常感谢你的帮助!

4

2 回答 2

1

我会在一个函数中提取该算法:

$string = $post['message'];
$data = array_map('strtolower', explode(' ', $string));

$tag = '-fr-';

function filterByTag($data, $tags) {
    return array_intersect($data, $tags);
}

$filteredData = filterByTag($data, array('-fr'));
// AND
$filteredData = filterByTag($filteredData, array('#science'));

连续调用它会导致一个AND条件。在参数中使用多个数组值调用它$tags是一个OR.

于 2014-02-10T09:22:40.910 回答
1

试试这个解决方案(适用于 PHP 5.3+):

function filterMessages($a_messages, $a_mandatory, $a_options) {
    return array_filter($a_messages, function ($text) use ($a_mandatory, $a_options) {
        $text = " $text ";
        $fn = function ($v) use ($text) {
            return stripos($text, " $v ") !== false;
        };
        return
            count(array_filter($a_mandatory, $fn)) == count($a_mandatory) &&
            count(array_filter($a_options, $fn)) > 0;
    });
}

$a_messages = array(
'-fr- #science #education',
'-fr- #science #politics',
'-fr- #science #animals',
);
$a_mandatory = array('-fr-', '#science');
$a_options = array('#education', '#politics');
print_r(filterMessages($a_messages, $a_mandatory, $a_options));
于 2014-02-10T09:29:48.710 回答