【问题标题】:how to display the result of the search in a table using php [closed]如何使用php在表格中显示搜索结果[关闭]
【发布时间】:2018-01-04 19:57:53
【问题描述】:

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

系统显示带有文件名和行号的用户请求。 如上传的图片所示。

result displayed

我需要让每一列都包含文件名,而行将包含行号

requested design

根据 Mirza 的回答得出的结果

displayed result

最后的结果

last result in table

截图

based on latest update of Mirza answer

要测试的文本

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

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

تسخن الأرض لامتصاص حرارة الشمس، ثم يعيد سطح الأرض إشعاع الطاقة مرة أخرى إلى الغلاف الجوي، وعند غياب أي تأثيرات معقدة يحدث اتزان حراري。 وفي هذه الحالة تكون درجة حرارة سطح الأرض نحو – 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>

【问题讨论】:

    标签: php foreach html-table readfile


    【解决方案1】:

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

    请替换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>';
    }
    ?>
    

    希望这会有所帮助!

    【讨论】:

    • 不,我想让列包含文件名,行将是行号,我将上传设计并编辑问题
    • 请看更新后的答案,这是你想要的吗?
    • 是的,这是我想要的,但它不起作用,它显示错误:注意:未定义的索引:C:\xampp\htdocs\readfiletest\index.php 中的文件名在第 38 行 === ===================================== 注意:未定义索引:C:\xampp\htdocs 中的行\readfiletest\index.php 在第 39 行 ========================================== = implode(): 第 39 行 C:\xampp\htdocs\readfiletest\index.php 中传递的参数无效
    • 更新了答案代码,添加了对文件名和行的验证,如下foreach ($result as $item){ $filename = $item['filename'] ? $item['filename'] : ''; $lines = $item['lines'] ? implode(',',$item['lines']) : ''; $filenameHtml .= "&lt;th&gt;$filename&lt;/th&gt;"; $lineNumberHtml .= "&lt;td&gt;$lines&lt;/td&gt;"; }
    • 仍然显示这些行:注意:未定义的索引:第 40 行 C:\xampp\htdocs\readfiletest\index.php 中的文件名 ============ =========================== 注意:未定义的索引:第 41 行 C:\xampp\htdocs\readfiletest\index.php 中的行
    猜你喜欢
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多