كيف يتم اقتطاع طرفي النص ما بين كلمة البحث في php

أنا عندي مقالات في جدول في القاعدة،

وأريد أن أجلب نتائج البحث فيها بحيث تظهر في قائمة النتائج الكلمة المطلوبة وقبلها 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;
        }
    }
  • عدل عليه إن أردت تخصيصه بشكله آخر .