#php #mysql
#php #mysql
Вопрос:
У меня есть текст :
$a = I wanna eat apple , and banana .
Я хочу получить все слова и знаки препинания в этом предложении :
$b = explode(' ', strtolower(trim($a)));
результатом разнесения является массив.
У меня есть таблица слов в базе данных, в которой есть поля :
id, word и typewords
все в нижнем регистре. но для пунктуации в БД их нет. Я хочу выполнить поиск по каждому слову в БД, чтобы выбрать тип слов, поэтому конечный результат, который я хочу получить, таков: words/typeofwords
=
Я/n хочу/v съесть/v яблоко/n,/ и/p банан/n ./.
вот код :
function getWord ($word){
$i = 0 ;
$query = mysql_query("SELECT typewords FROM words WHERE word = '$word' ");
while ($row = mysql_fetch_array($query)) {
$word[$i] = $row['typewords'];
$i ;
}
return $word;
}
echo $b.'/'.getWord($b);
но это не работает, пожалуйста, помогите мне, спасибо!
Комментарии:
1. @RonakPatel пустой результат
2. дамп вашего запроса и проверка непосредственно в базе данных.
3. @RonakPatel NULL, верен ли мой запрос для массива? возможно, проблема в том, что в моей
words
таблице нет данных puctuation (,. etc), поэтому я должен выполнить условие if для этого
Ответ №1:
Попробуйте с этим:
function getWord($words){
$association = array();
foreach($words as $word)
{
$query = mysql_query("SELECT typewords FROM words WHERE word = '$word' ");
if($row = mysql_fetch_array($query))
$association[$word] = $row['typewords'];
elseif(preg_match('/[.,:;?!]/',$word)==1)
$association[$word] = $word;
}
return $association;
}
$typewords = getWord($b);
foreach($b as $w)
echo $w.'/'.$typewords[$w];
Комментарии:
1. о, большое вам спасибо, но как насчет пунктуации ? в поле word нет данных о пунктуации, поэтому пунктуация должна сама давать результат, например:
./.
,,/,
2. Я исправил это, чтобы распознавать знаки препинания и вести себя правильно! Если вам нужно, вы можете добавить / удалить распознавание знаков препинания (на данный момент он распознает следующее
. , : ; ? !
)
Ответ №2:
function getWord($word){
// concat the word your searching for with the result
// http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat
$query = mysql_query("SELECT CONCAT(word,'/',typewords) as this_result FROM words WHERE word = '$word' ");
$row = mysql_fetch_array($query);
return $row['this_result']." "; // added a space at the end.
}
// loop through the $b array and send each to the function
foreach($b as $searchword) {
echo getWord($searchword);
}
Ответ №3:
Вы предполагаете, что параметр функции является массивом, но это строка.
Редактировать: в вашей функции вы обрабатываете $word
как массив, так и строку. Решите, что вы хотите, и перекодируйте свою функцию.
Комментарии:
1. итак, я должен сделать его массивом, чтобы я мог получить доступ к этой строке строки?