如何使用php在表中显示搜索结果

时间:2018-01-02 07:18:02

标签: php foreach html-table readfile

我有一个从txt文件中读取的php脚本,并在允许用户输入要搜索的字符串后显示结果。

系统使用文件名和行号显示用户请求。  正如它在上传的图片中所示。

result displayed

我需要的是让每列包含文件名,行将包含行号

requested design

基于米尔扎答案的结果

displayed result

最后的结果

last result in table

截图

based on latest update of Mirza answer

要测试的文本

  

سيلانالطاقةالحراريةمنالبيئةوإليها。 وعادةمايطلقهذاالاسمعلى   ظاهرةارتفاعدرجاتحرارةالأرضعنمعدلهاالطبيعي。 وقدازدادالمعدل   العالميلدرجةحرارةالهواءعندسطحالأرضب0.74±0.18°Cخلالالمائة   2005年عامالمنتهيةسنة   “أغلبالزيادةالملحوظةفيمعدلدرجةالحرارةالعالميةمنذمنتصفالقرن   العشرينتبدوبشكلكبيرنتيجةلزيادةغازاتالاحتباسالحراري(غازات   البيتالزجاجي)التيتبعثهاالنشاطاتالتييقومبهاالبشر。

     

تخترقأغلبأشعةالشمسالغلافالجويلتصلإلىسطحالأرضوأغلبتلكالأشعة   تقعفيالطولالموجيالمرئي(ضوءالشمسالذيتراهالعين)لذلكيحدثتسخين   更多信息,更多信息,更多信息   更多信息,更多信息   الحياةعليها。

     

تسخنالأرضلامتصاصحرارةالشمس,ثميعيدسطحالأرضإشعاعالطاقةالممتصة   更多信息来自الغلافالجوي   حراري。 وفيهذهالحالةتكوندرجةحرارةسطحالأرضنحو - 2.3درجةمئوية,   发布消息来源:وهذا   المثالمخالفللواقع)。

     

وفيالواقعتعقيدات,حيثيحتجزالغلافالجويجزءامنالأشعةتحت   الحمراء;لوجودجزئياتثانيأكسيدالكربونوبخارالماءالتيتمتصالجزء   更多信息,更多信息更多信息   الغلافالجويإلىالفضاء,ويعملالجزءالممتصمنالأشعةتحتالحمراءفي   الغلافالجويعلىرفعدرجةالحرارة。1

的代码:

<?php

$result = [];
if(isset($_POST["search"]))
{
    $search =$_POST['name'];
    echo "the word  $search exist: <br><br>";
    foreach(glob($_SERVER['DOCUMENT_ROOT']."/readfiletest/*.txt") as $txts)
    {
        $line = 1;
        $temp   = [];
        $myFileLink = fopen($txts, 'r');
        while(!feof($myFileLink))
        {
            $myFileContents = fgets($myFileLink);
            if( preg_match_all('/('.preg_quote($search,'/').')/i', $myFileContents, $matches))
            {

                $temp['filename'] = basename ($txts);
                foreach($matches[1] as $match)
                {
                    $temp['lines'][] = $line;
                }
            }
            ++$line;
        }
        fclose($myFileLink);

        $result[] = $temp;
    }

    //display the table
    echo '<table border=2>';

    $filenameHtml    = '<tr>';
    $lineNumberHtml    = '<tr>';
    foreach ($result as $item){
     $filename = isset($item['filename']) ? $item['filename'] : '';
     $lines = isset($item['lines']) ? implode(',',$item['lines']) : '';
     $filenameHtml .= "<th>$filename</th>";
     $lineNumberHtml .= "<td>$lines</td>";
    }
    $filenameHtml    .= '</tr>';
    $lineNumberHtml  .= '</tr>';

    echo $filenameHtml.$lineNumberHtml;
    echo '</table>';
}
?>

<html>
    <head>
    </head>
    <meta http-equiv="Content-Language" content="ar-sa">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <style>
          #form {
        background: -webkit-linear-gradient(bottom, #CCCCCC, #EEEEEE 175px);
        background: -moz-linear-gradient(bottom, #CCCCCC, #EEEEEE 175px);
        background: linear-gradient(bottom, #CCCCCC, #EEEEEE 175px);
        margin: auto;
        width: 200px;
        height: 200px;
        position: absolute;


        font-family: Tahoma, Geneva, sans-serif;
        font-size: 14px;
        font-style: italic;
        line-height: 24px;
        font-weight: bold;
        color: #09C;
        text-decoration: none;
        border-radius: 10px;
        padding: 10px;
        border: 1px solid #999;
        border: inset 1px solid #333;
        -webkit-box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3);
        -moz-box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3);
        box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3);
      }

    </style
    <body>
    <div id = "form">
        <form action="index.php" method="post">
          <h1 align =center > Search Form </h1>
          <p>enter your string <input type ="text"  id = "idName"  name="name" /></p>
          <p align =center ><input type ="Submit" name ="search" value= "Search" /></p>
        </form>
    </div>
    </body>
</html>

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望看到如下所示的结果。

enter image description here

请替换如下的php代码。

<?php

$result = [];
if(isset($_POST["search"]))
{
    $search =$_POST['name'];
    echo "the word  $search exist: <br><br>";
    foreach(glob($_SERVER['DOCUMENT_ROOT']."/readfiletest/*.txt") as $txts)
    {
        $line = 1;
        $temp   = [];
        $myFileLink = fopen($txts, 'r');
        while(!feof($myFileLink))
        {
            $myFileContents = fgets($myFileLink);
            if( preg_match_all('/('.preg_quote($search,'/').')/i', $myFileContents, $matches))
            {

                $temp['filename'] = basename ($txts);
                foreach($matches[1] as $match)
                {
                    $temp['lines'][] = $line;
                }
            }
            ++$line;
        }
        fclose($myFileLink);

        if(!empty($temp)) {
            $result[] = $temp;
        }
    }

    //display the table
    echo '<table border=2>';

    $filenameHtml    = '<tr>';

    foreach ($result as $item) {
        $filename = isset($item['filename']) ? $item['filename'] : '';
        $filenameHtml .= "<th>$filename</th>";

        //this line was not having the concatination
        $lineNumberHtml .= '<td><table width="100%" border=2>';
        foreach($item['lines'] as $line) {
            $lineNumberHtml .= '<tr>';
            $lineNumberHtml .= "<td>$line</td>";
            $lineNumberHtml .= '</tr>';
        }
        $lineNumberHtml .= '</table></td>';

    }
    $filenameHtml    .= '</tr>';


    echo $filenameHtml.$lineNumberHtml;
    echo '</table>';
}
?>

希望这有帮助!