PHP中的Levenshtein
我已经在一个模型中编写了这些函数(我正在使用CodeIgniter) 函数getLocalingrName() { $this->load->database(); $query=$this->db->get('onl_local_ingrd'); foreach($query->result()作为$row) $allingrd[]=$row->ingrd\u localname; 返回$allingrd; } 函数getCloseingrName($ingrName,$localname) { $this->load->database(); $query=$this->db->get('onl_ingrd'); foreach($query->result()作为$row) $allingrd[]=$row->ingrd\u name; foreach($localname作为$row) $allingrd[]=$row; $shortest=-1; foreach($allingrd作为$ingrd){ $lev=levenshtein($ingrdname,$ingrd); 如果($lev load->model('searchRecipe_model'); $IngrName=$this->input->post('IngrName'); $output[]=2; $localnames[]=$this->searchRecipe\u model->getLocalingrName(); $output[]=$this->searchRecipe\u model->getCloseIngrdname($ingrdname,$localname); echo json_encode($localnames); }PHP中的Levenshtein,php,codeigniter,model,foreach,levenshtein-distance,Php,Codeigniter,Model,Foreach,Levenshtein Distance,我已经在一个模型中编写了这些函数(我正在使用CodeIgniter) 函数getLocalingrName() { $this->load->database(); $query=$this->db->get('onl_local_ingrd'); foreach($query->result()作为$row) $allingrd[]=$row->ingrd\u localname; 返回$allingrd; } 函数getCloseingrName($ingrName,$localname)
$allingrd
是一个成分名称数组。我在javascript警报消息中显示$closeword
。
如果我给出
$lev=levenshtein($IngrName,$allingrd[0])
它工作得很好;但是,它没有在循环中工作。关于原因有什么想法吗?请提前感谢。我想你要做的是:
foreach ($allingrd as $ingrd) {
$lev = levenshtein($ingrdname, $ingrd);
if ($lev <= $shortest || $shortest < 0) {
$closeword[] = $ingrd;
$shortest[] = $lev;
}
}
return $closeword;
foreach($allingrd作为$ingrd){
$lev=levenshtein($ingrdname,$ingrd);
如果($lev可能您有超过255个字符的som字符串?在这种情况下,levenshtein()函数返回-1,这意味着根据您的算法,最后一个这样的字符串将始终是“最短的”。如果这是您的问题,您需要通过以下方式丢弃$lev等于-1的值:
foreach ($allingrd as $ingrd) {
$lev = levenshtein($ingrdname, $ingrd);
if (($lev <= $shortest || $shortest < 0) && $lev != -1) {
$closeword = $ingrd;
$shortest = $lev;
}
}
return $closeword;
foreach($allingrd作为$ingrd){
$lev=levenshtein($ingrdname,$ingrd);
if($lev注意PHP页面上他们如何将$shortest
声明为-1
。这非常重要,否则您将永远无法满足if
语句的要求
$shortest = -1;
foreach ($allingrd as $ingrd) {
$lev = levenshtein($ingrdname, $ingrd);
if ($lev <= $shortest || $shortest < 0) {
$closeword = $ingrd;
$shortest = $lev;
}
}
return $closeword;
$shortest=-1;
foreach($allingrd作为$ingrd){
$lev=levenshtein($ingrdname,$ingrd);
if($levlevenshtein()
希望两个参数都作为字符串。另外,如何工作?在循环中运行时会发生什么?您希望发生什么?您需要提供更多上下文。数组allingrd
中有什么?
foreach ($allingrd as $ingrd) {
$lev = levenshtein($ingrdname, $ingrd);
if (($lev <= $shortest || $shortest < 0) && $lev != -1) {
$closeword = $ingrd;
$shortest = $lev;
}
}
return $closeword;
$shortest = -1;
foreach ($allingrd as $ingrd) {
$lev = levenshtein($ingrdname, $ingrd);
if ($lev <= $shortest || $shortest < 0) {
$closeword = $ingrd;
$shortest = $lev;
}
}
return $closeword;