поиск по массиву слов в базе данных

#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. итак, я должен сделать его массивом, чтобы я мог получить доступ к этой строке строки?