2015-12-21 13 views
0

Я попытался сделать совпадение в выпадающий список со списком категорий с первым подобным словом, найти на регистре, например:PHP Левенштейн сходство на выпадающий список с идентификатором

ввода цитата: «солнце большой, и никто не может видеть его непосредственно»

взрываются каждое слово в массиве„в“,„солнце“, и т.д ...

найти слово в категории с похожим названием: категория„большой“

До тех пор пока это не нормально, но категория имеет идентификатор, поэтому ... ho w я могу сделать это совпадение с идентификатором, потому что он находит слово, но всегда сохраняет с идентификатором первой категории.

Вот мой код: (Отредактированный @ Mike)

<?php 
$rows = mysql_num_rows($RecordsetCategory); 
    if($rows > 0) { mysql_data_seek($RecordsetCategory, 0); 
while ($row_RecordsetCategory = mysql_fetch_assoc($RecordsetCategory)) { 

$input = $row_RecordsetCategory['category']; 
$words = str_word_count($quotes,1); 
$shortest = -1; 

foreach ($words as $word) { 
    $lev = levenshtein($input, $word); 
    if ($lev == 0) { 
     $closest = $word; 
     $shortest = 0; 
     break; 
    } 
    if ($lev <= $shortest || $shortest < 0) { 
     $closest = $word; 
     $shortest = $lev; 
    } 
} 

if ($shortest == 0) { ?> 
    <option value="<?php echo $row_RecordsetCategory['id']?>"><?php echo $closest;?></option> 
<?php } 
} 
} 
?> 

Но что я получаю такое же категория для всех этих цитат, когда каждый из них должен иметь различный >>category quotes

ответ

1

It кажется, что вы хотите цикл while, но используете цикл do. Улучшается ли это?

<?php 

$rows = mysql_num_rows($RecordsetCategory); 
if($rows > 0) { 
    mysql_data_seek($RecordsetCategory, 0); 

    while ($row_RecordsetCategory = mysql_fetch_assoc($RecordsetCategory)) { 
     $input = $row_RecordsetCategory['category']; 

     $chain = $quote; 
     $array = explode(" ", $quote); 
     $words = $array; 

     $shortest = -1; 

     foreach ($words as $word) { 
      $lev = levenshtein($input, $word); 
      if ($lev == 0) { 
       $closest = $word; 
       $shortest = 0; 
       break; 
      } 
      if ($lev <= $shortest || $shortest < 0) { 
       $closest = $word; 
       $shortest = $lev; 
      } 
     } 

     ?><option value="<?php echo $row_RecordsetCategory['id']?>"><?php echo $closest;?></option><?php 
    } 

} 

Я не могу сказать, что я полностью понимаю, что вы делаете, но вы хотите выполнить запрос перед запуском от результатов запроса.

+0

Привет @Mike, спасибо, я изменяю код и редактирую вопрос, я хочу, чтобы каждая цитата автоматически находила категорию с совпадением первого слова между списком слов этой цитаты. Извините, если мой английский это не очень хорошо –