Я попытался сделать совпадение в выпадающем списке со списком категорий с первым подобным словом, которое найдено в регистре, например:
Введите цитату: «Солнце прекрасно, и никто не может видеть его напрямую»
взорвать каждое слово в массиве «the», «sun» и т.д …
найти слово в категории с похожим названием: категория «отлично»
Пока это нормально, но у категории есть идентификатор, так что … как я могу сделать это совпадение с идентификатором, потому что он находит слово, но всегда сохраняет с первым идентификатором категории.
Вот мой код: (отредактировано @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 }
}
}
?>
Но то, что я получаю, — это одна и та же категория для всех этих цитат, когда каждая из них должна иметь разные >> кавычки категории
Кажется, что вы хотите 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
}
}
Я не могу сказать, что полностью понимаю, что вы делаете, но вы захотите выполнить запрос, прежде чем работать с результатами запроса.
Других решений пока нет …