2012-08-06 27 views
0

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

我不认为这是非常有效的,再加上它只是返回匹配的标签,它不会只返回一个权重最高。怎么做?

回答

0

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

+0

当应用于我的例子时,它返回“猫”,它应该返回“狗”。我认为它假设指数越高,权重越高,但应该被视为相反。 – TK123 2012-08-06 22:19:36

+0

我看到,反转$标签和$权重。答案已更新。 – Rob 2012-08-06 22:20:53

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]; 
    } 
} 
相关问题