Du kan väl ange flera tecken i explode
$wordsArray = explode(" ,\".", $inText);
Fast då kanske det är risk att du får tomma ord. Så kontrollera längden på ordet innan du lägger det i databasen.
5 svar · 627 visningar · startad av pcw
För att kunna söka efter orden i en databas senare. Problemet jag har är att när jag indexerar orden så tar jag hela strängen och exploderar den med " " som villkor. Det fungerar ganska så bra. Men ibland kommer ex. ett citations tecken med ordet som ska indexeras om strängen börjar med ett citat, en punkt kommer med om ordet som ska indexeras slutar med en punkt osv. Jag skulle som sagt bara vilja indexera orden och inte dessa onödiga tecken.
Så som funktionen ser ut nu är detta:
function indexWords($inText, $scoopId, $insertTable, $db) {
$inText = strip_tags($inText);
$wordsArray = explode(" ", $inText);
foreach($wordsArray as $word) {
$word = $db->quote($word);
$sql = "SELECT wordId FROM Words WHERE word = $word"; // check if word exists already in Words table
$r_recordset = $db->query($sql);
$words = $r_recordset->fetchRow();
if( !is_object($words) ) { // if word doesn't exist add it to the Words table
$sql = "INSERT INTO Words (word) VALUES ($word)";
$db->query($sql);
$sql = "SELECT LAST_INSERT_ID() AS wordId"; // get the wordId of the newly added word
$r_recordset = $db->query($sql);
$words = $r_recordset->fetchRow();
}
$sql = "SELECT * FROM " . $insertTable . " WHERE scoopId=" . $db->quote($scoopId) . " AND wordId=" . $db->quote($words->wordid); // check if the word already exists in insertTable
$r_recordset = $db->query($sql);
$a_results = $r_recordset->fetchRow();
if( !is_object($a_results) ) { // if it doesn't exist add it to the table
$sql = "INSERT INTO " . $insertTable . " (wordId, scoopId) VALUES (" . $db->quote($words->wordid) . ", " . $db->quote($scoopId) . ")";
$db->query($sql);
}
}
}
Du kan väl ange flera tecken i explode
$wordsArray = explode(" ,\".", $inText);
Fast då kanske det är risk att du får tomma ord. Så kontrollera längden på ordet innan du lägger det i databasen.
$forbidden = array(",", "\"", "'", ".");
$inText = str_replace($forbidden, "", $inText);
colione skrev:
$forbidden = array(",", "\"", "'", "."); $inText = str_replace($forbidden, "", $inText);
Det är inte så bra lösning, om någon skulle skriva lite fel t.ex.
test,text.mera text. så,blir,det konstigt
skulle bli:
testtextmera
text
såblirdet
konstigt
$forbidden = array(",", "\"", "'", ".");
$inText = str_replace($forbidden, " ", $inText);
Ersätter man de med ett mellanrum så sätts inte orden ihop, fast man kan få en del "tomma" ord.
The_Hulk skrev:
Ersätter man de med ett mellanrum så sätts inte orden ihop, fast man kan få en del "tomma" ord.
Fast det kan man ju kolla innan de skickas till indexeringen. Modell:
$forbidden = array(",", "\"", "'", ".");
$inText = str_replace($forbidden, " ", $inText);
$ex = explode(" ", $inText);
foreach($ex as $word) {
if (strlen($word) > 0) {
//Do what you want
}
}
Om du kollar andra inlägget så skrev jag: "Fast då kanske det är risk att du får tomma ord. Så kontrollera längden på ordet innan du lägger det i databasen."
Gav ingen kod för det utan uppmärksammade det bara.