如何检查一个数组与另一个数组并返回单个最高匹配?

时间:2012-08-06 22:10:56

标签: php arrays

我的网站上有很多不同标签的文章。目前我只对这4个标签感兴趣:

Dog
Camel
Bear
Cat

如果文章中有任何这些标记我想显示它。如果一篇文章中有两个或更多这些标签,我希望返回更高级别的标签。例如,如果文章同时包含Bear和Cat标签,则应返回Bear。

到目前为止我的代码:

function determine_tag($tags) {
    $weights = array(
        'Dog',
        'Camel',
        'Bear',
        'Cat'
    );

    $matches = array();

    foreach($tags as $tag) {
        if(in_array($tag, $weights)) {
            $matches[] = $tag;
        }
    }

    var_dump($matches); // returns array (Cat, Dog)
}

$tags = array('Cat', 'Floating', 'Dog', 'lol', 'Article');
echo determine_tag($tags);

我认为它不是非常有效,而且它只返回匹配的标签,它不会返回具有最高权重的标签。怎么做?

2 个答案:

答案 0 :(得分:0)

$tag = array_shift(array_intersect($weights, $tags));

答案 1 :(得分:0)

我会使用array_intersect然后查看匹配数组中的第一个值。像这样:

function determine_tag($tags) {
    $weights = array(
        'Dog',
        'Camel',
        'Bear',
        'Cat'
    );

    $matches = array_intersect($weights, $tags);

    if (count($matches) > 0) {
       $top_match = $matches[0];
    }
}