Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的Levenshtein_Php_Codeigniter_Model_Foreach_Levenshtein Distance - Fatal编程技术网

PHP中的Levenshtein

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)

我已经在一个模型中编写了这些函数(我正在使用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); }
$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($lev
levenshtein()
希望两个参数都作为字符串。另外,如何工作?在循环中运行时会发生什么?您希望发生什么?您需要提供更多上下文。数组
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;