أنا عندي مقالات في جدول في القاعدة،
وأريد أن أجلب نتائج البحث فيها بحيث تظهر في قائمة النتائج الكلمة المطلوبة وقبلها 5 كلمات (على سبيل المثال) وبعدها خمس كلمات، وليس كامل المقالة.
فسؤالي، كيف أحذف كامل النص ماعدا كلمة معينة وكلمات قبلها، وكلمات بعدها؟
يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد
دخول
التعليقات
بالعادة البحث يكون على الوسوم او التصنيفات او عناوين المقالات ,,
ولكن ان كنت مصر على البحث بداخل المحتوى , فهذا كود بسيط قد يكون طرف الخيط للفكرة (يمكنك ان تجعله افضل)
// get word
$keyWord = $_GET['key_word'];
$db = mysql_connect('host', 'username', 'password');
// declare $html by default is empty -> to save html structure to similar posts
$html = '';
// select database name
mysql_select_db('dbName');
// select posts from database
$getPstsFromDb = mysql_query("SELECT post_content, post_title FROM posts_table");
// fetch sql result
while($allPosts = mysql_fetch_array($getPstsFromDb)) {
$singlePost = $allPosts['post_content'];
$postTitle = $allPosts['post_title'];
// separate post content to words
$words = explode(' ', $singlePost);
// check if word similar to $keyWord
if(in_array($keyWord, $words)) {
$html .= '<h1>' . $postTitle . '</h1>';
$html .= '<p>' . getAfterBefor($singlePost, $keyWord) . '</p>';
}
}
function getAfterBefor($content, $key) {
// declare before words and after words
$wordAfterKeyWord = '';
$wordBeforKeyWord = '';
// skip $keyWord and get befere words and before words
list($wordBefore, $wordAfter) = explode($key, $content);
$allWordsBefor = array_reverse(explode(" ", $wordBefore));
$allWordsAfter = explode(" ", $wordAfter);
// concatenate before words and after words
if(count($allWordsBefor) < 5) {
$wordBeforKeyWord = implode(' ', $allWordsBefor);
} else {
for($i = 0; $i < 5; $i++) {
$wordBeforKeyWord = $allWordsBefor[$i] . ' ' . $wordBeforKeyWord;
}
}
if(count($allWordsAfter) < 5) {
$wordBeforKeyWord = implode(' ', $allWordsAfter);
} else {
for($i = 0; $i < 5; $i++) {
$wordBeforKeyWord = $wordBeforKeyWord . $allWordsAfter[$i] . ' ';
}
}
// return before words + key word + after words
return $wordAfterKeyWord . $key . $wordBeforKeyWord;
}
// print the result -> $html var
echo $html;
السلام عليكم
على إفتراض أن الكلمات يتم الفصل بينها بمسافة فارغة سيكون الكود كالتالي:
$s = 'QI WI EI RI TI YI UI II OI PI AI SI DI FI GI HI JI';
echo strCut($s, 'OI', 3, 2 );
function strCut($text, $word, $wBefore, $wAfter)
{
$text = strip_tags($text);
$text = explode(' ',$text);
$index = array_search($word, $text);
if($index > -1)
{
$start = $index - $wBefore;
if($start < 0)
{
$wBefore = $wBefore - $start;
$start = 0;
}
$var1 = array_slice($text, $start, $wBefore);
$var2 = array_slice($text, $index, $wAfter+1);
return implode(' ',$var1).' '.implode(' ',$var2);
}
else
{
return false;
}
}
- عدل عليه إن أردت تخصيصه بشكله آخر .