簡體   English   中英

PHP 簡單搜索示例

[英]PHP Simple Search Example

我正在學習 PHP 並在文本文件腳本中進行了一些搜索。 以下是事件鏈:

  1. 打開文本文件
  2. 從每個新行創建數組
  3. 如果提交表單,則將帖子數據放入一個函數中,該函數運行一個正則表達式來查找部分字符串或單詞,如果匹配,則所有條目都將在代碼中替換為一個類,並帶有一些 CSS。

我的問題是:

如果我有這樣一句話:

湯姆手里拿着相機。 我也是地板上的相機。

並搜索“am”,它搜索並找到相機,將其替換為 span 類。 然后它找到“am”並在 Camera 中替換它兩次,然后替換它本身。

這是我的代碼:

    //---- Puts Array into or responds with error
    $lines = file($filename, FILE_IGNORE_NEW_LINES);
    if ( !is_array($lines) ) {
       echo 'Cannot create array from file';
    }

    //---- Scans and Displays Lines
    $submission = $_GET['Search'];
    function scanLines($lines, $submission) {
        foreach($lines as $line) {      
            if(strpos($line,$submission)!== false){             
                preg_match_all("/\b[a-z]*".preg_quote($submission)."[a-z]*\b/i", $line, $matches);  

                $i = 0;
                foreach($matches[$i] as $match) {   
                    $line = str_replace($match, '<span class="highlight">'.$match.'</span>', $line);
                $i++;                   
            }
            echo $line;
        }       
    }       
}

直接鏈接到示例: http : //www.effectivemark.com/testphp/

我的問題是:過濾掉相機中“am”的最佳方法是什么,所以它不會添加帶有 span 標簽的字符串,如下所示:

    <span class="highlight">c<span class="highlight">am</span>era</span>

更新代碼:

//---- Scans and Displays Lines
$submission = $_GET['Search'];
function scanLines($lines, $submission) {
    foreach($lines as $line) {      
        if(strpos($line,$submission)!== false){ 

            $words = explode(' ', $line);
            $i = 0;
            $combine = array();
            foreach($words as $word) {
                if (preg_match("/\b[a-z]*".preg_quote($submission)."[a-z]*\b/i", $word)) {
                    preg_match_all("/\b[a-z]*".preg_quote($submission)."[a-z]*\b/i", $word, $match);
                    $matches = '<span class="highlight">' . $match[0][0] . '</span>';
                }
                else { 
                    $matches = $word;
                }
                array_push($combine, $matches);
            $i++;
            }

            foreach($combine as $combined) {
                echo $combined . ' ';
            }
        }       
    }       
}

你最好把行分成單詞,這樣可以很容易地匹配它們

我認為這沒問題:

    <form action="" method="post">
    <h4>Search Object In Text File:</h4>
    <input type="text" name="search" value="">
    <input type="submit" value="Submit" name="Submit">
    </form>
    <?php
        $filename="tekst.txt";
        $lines = file($filename, FILE_IGNORE_NEW_LINES);

        if ( !is_array($lines) ) {
            echo 'Cannot create array from file';
        }

        //---- Scans and Displays Lines

        if(isset($_POST['search']))    
$submission = $_POST['search'];
        scanLines($lines,$submission);

        function scanLines($lines, $submission) {
            foreach($lines as $line) {
                $word_arr=str_word_count($line,1);
                $length=count($word_arr);
                for($i=0;$i<$length;$i++) {

                    if(preg_match("#$submission#",$word_arr[$i],$match)) {
                        $word_arr[$i]='<span class="highlight">'.$word_arr[$i].'</span>';
                        $new_line=implode(' ',$word_arr);
                        echo $new_line.'<br>';
                    }

                }

            }

        }

        ?>

因此,如果您想搜索單詞的任何部分,並突出顯示整個單詞,而不僅僅是匹配的部分。 對於完整的(更嚴格的)全詞搜索,您可以使用簡單的 in_array() 函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM