mb_levenshtein

  • タグ:
  • タグはありません
<?php
/**
*
*
* @param string $str1
* @param string $str2
* @param string $encoding (= )
* @return int (OK) / -1(NG)
* @reference
* PHP -
* http://life-hack.jp/blog/charly/157
* @cation
* levenshtein $cost_ins, $cost_rep, $cost_del
*/
function mb_levenshtein($str1, $str2, $encoding = NULL)
{
//
if ($encoding === NULL) {
// 使
$encoding = mb_internal_encoding();
}
$d = array ();
//
$ary1 = mbStrToAry($str1, $encoding);
$ary2 = mbStrToAry($str2, $encoding);
$len1 = count($ary1);
$len2 = count($ary2);
// 255
if ($len1 > 255 || $len2 > 255) {
return -1;
}
for ($i1 = 0; $i1 <= $len1; $i1++) {
$d[$i1] = array ();
$d[$i1][0] = $i1;
}
for ($i2 = 0; $i2 <= $len2; $i2++) {
$d[0][$i2] = $i2;
}
for ($i1 = 1; $i1 <= $len1; $i1++) {
for ($i2 = 1; $i2 <= $len2; $i2++) {
$cost = ($ary1[$i1 - 1] == $ary2[$i2 - 1]) ? 0 : 1;
$d[$i1][$i2] = min(
$d[$i1 - 1][$i2 ] + 1, //
$d[$i1 ][$i2 - 1] + 1, //
$d[$i1 - 1][$i2 - 1] + $cost //
);
}
}
return $d[$len1][$len2];
}
/**
* 1
*
* @param string $mbStr
* @param string $encoding
* @return array
* @reference
* - http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1417635014
*/
function mbStrToAry($mbStr, $encoding = NULL)
{
//
if ($encoding === NULL) {
// 使
$encoding = mb_internal_encoding();
}
$aryRet = array();
// 0
while ($iLen = mb_strlen($mbStr, $encoding)) {
// 1
$aryRet[] = mb_substr($mbStr, 0, 1, $encoding);
// 2
$mbStr = mb_substr($mbStr, 1, $iLen, $encoding);
}
return $aryRet;
}
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX