如何将一个数组与另一个数组进行比较并返回单个最高匹配


How to check one array against another and return the single highest match?

我的网站上有一些文章有很多不同的标签。目前我只对这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);

我认为它的效率不是很高,而且它只返回匹配的标签,而不仅仅返回权重最高的标签。如何做到这一点?

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

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

function determine_tag($tags) {
    $weights = array(
        'Dog',
        'Camel',
        'Bear',
        'Cat'
    );
    $matches = array_intersect($weights, $tags);
    if (count($matches) > 0) {
       $top_match = $matches[0];
    }
}