我有一堆单词。例如:将一组相似单词分组
array(developer,develop,development,design,designer,designing)
我希望能集团这些话与他们相似的词放在一起,所以我会得到这样的事情:
array(
array(develop, developer, development),
array(design, designer, designing),
);
什么是在PHP中做到这一点的最好办法?
我有一堆单词。例如:将一组相似单词分组
array(developer,develop,development,design,designer,designing)
我希望能集团这些话与他们相似的词放在一起,所以我会得到这样的事情:
array(
array(develop, developer, development),
array(design, designer, designing),
);
什么是在PHP中做到这一点的最好办法?
您可以轻松地使用metaphone()
做到这一点:
$result = array();
foreach ($array as $word) {
$result[metaphone($word, 2)][] = $word;
}
print_r($result);
将显示:
Array
(
[TF] => Array
(
[0] => developer
[1] => develop
[2] => development
)
[TS] => Array
(
[0] => design
[1] => designer
[2] => designing
)
)
一个PHP实现的一种方法是向正在添加我的脑海里
$array = array('developer','develop','development','design','designer','designing');
function matchWords(array $in,$pad='4')
{
$ret = array();
foreach ($in as $v) {
$sub = substr($v, 0, $pad);
if (!isset($ret[$sub])) {
$ret[$sub] = array();
}
$ret[$sub][] = $v;
}
return array_values($ret);
}
print_r(matchWords($array,4));
Array
(
[0] => Array
(
[0] => developer
[1] => develop
[2] => development
)
[1] => Array
(
[0] => design
[1] => designer
[2] => designing
)
)
这是你的数组值的$pad
第一个字母相匹配,并且在其上创建一个关键。
我很难决定接受你的答案或者杰克。最后,我实际上使用了提供的一个jackflash,所以我觉得我需要把它作为正确的答案。但是,如果我能够接受两个答案,我会的。我赞扬你对我的问题的快速回应!谢谢! – Luke
PHP API(如果你可以称它的话)让我惊叹不已。构建在语言中的有用“东西”数量非常惊人。 – Luke
是的,几乎所有东西都有一个功能。其实这是惊人的:) – Carlos