首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检测数组中的类似值?

如何检测数组中的类似值?
EN

Stack Overflow用户
提问于 2013-12-27 01:28:37
回答 2查看 68关注 0票数 0

假设我有一个看起来像这样的类型列表:

代码语言:javascript
运行
复制
$genres = array(
    'soul', 
    'soul jazz', 
    'blues', 
    'jazz blues', 
    'rock', 
    'indie', 
    'cool jazz', 
    'rock-blues');

...And等,用于762个值。我如何将这些类型组织成类别?

例如,我希望蓝调类别包含“蓝调”、“爵士蓝调”和“摇滚乐”。我希望爵士乐类别包含“灵魂爵士乐”、“爵士蓝调”和“酷爵士乐”。

任何和所有的帮助都是感激的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-27 01:53:55

使用preg_match将是解决问题的最佳方法之一。

代码语言:javascript
运行
复制
<?php
$categories = array("blues", "jazz");
$genres = array("soul", "soul jazz", "blues", "jazz blues", "rock", "indie", "cool jazz", "rock-blues");
$arr = array();
$others = array();
foreach($genres as $genre){
$num = 0;
    foreach($categories as $category){
        if(preg_match("/\\b".$category."\\b/", $genre)){
        $arr[$category][] = $genre;
        $num = 1;
        }
    }
    if($num == 0){
    $others[] = $genre;
    }
}
ksort($arr);
$arr["others"] = $others;
unset($genre, $num, $category, $others);
print_r($arr);
?>

其结果将是:

代码语言:javascript
运行
复制
Array
(
    [blues] => Array
        (
            [0] => blues
            [1] => jazz blues
            [2] => rock-blues
        )

    [jazz] => Array
        (
            [0] => soul jazz
            [1] => jazz blues
            [2] => cool jazz
        )

    [others] => Array
        (
            [0] => soul
            [1] => rock
            [2] => indie
        )

)
票数 1
EN

Stack Overflow用户

发布于 2013-12-27 01:33:34

给了一些种子:

代码语言:javascript
运行
复制
$seeds = array('blues','jazz',...);

然后计算它最接近的位置:

代码语言:javascript
运行
复制
foreach($genres as $v) {
 $similarity = 0;
 $k = 0;
 foreach($seeds as $kk=>$vv) {
     $current = similar_text($v,$vv);
     if ($current>$similarity) {
        $similarity = $current;
        $k=$kk;
     }
  }
 $categories[$k][]=$v;

}

在这一点上,您的$geners标记在$categories中;

代码语言:javascript
运行
复制
Array
(
    [blues] => Array
        (
            [0] => soul
            [1] => blues
            [2] => jazz blues
            [3] => rock
            [4] => indie
            [5] => rock-blues
        )

    [jazz] => Array
        (
            [0] => soul jazz
            [1] => cool jazz
        )

)

代码页上经过测试的代码:http://codepad.org/HCPcO4Iy

PS。很明显,如果你有这两个种子(布鲁斯和吉兹),然后你必须将“天哪蓝调”这一类型聚在一起,那么它可能会被分配给一个或另一个,而没有任何逻辑。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20793501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档