如何使分页在PHP中抛出csv文件?

时间:2019-07-17 06:46:48

标签: php csv

我有一个csv文件,里面有一些数据。 当用户在搜索栏中键入内容时,它将返回相关数据,但是这些结果太多,我想进行分页。我没有任何想法,谷歌搜索很多,但找不到解决方法。请帮忙。

$filename = "Database.csv";
            $delimiter = ",";
            if (!file_exists($filename) || !is_readable($filename))
                return false;

            if ($delimiter == ',') {
                $csv = array_map('str_getcsv', file($filename));
            } else {
                $lines = file($filename);
                $line_num = count($lines);
                $dm = [];

                $csv = array_map('str_getcsv', $lines, array_pad($dm, $line_num, $delimiter));
            }

            array_walk($csv, function (&$row) use ($csv) {
                $row = array_combine($csv[0], $row);
            });

            array_shift($csv);
            $total_row_of_csv = count($csv);
            $total_row = 0;
            for ($i = 0; $i < $total_row_of_csv; $i++) {
                if (preg_match("/$value/i", $csv[$i]['Catagory'])) {                                                       
                        echo "<tr>";
                        echo "<td>" . $csv[$i]['Ref'] . "</td>";
                        echo "<td>" . $csv[$i]['Catagory'] . "</td>";
                        echo "<td>" . $csv[$i]['JobTitle'] . "</td>";
                        echo "<td>" . $csv[$i]['Description'] . "</td>";
                        echo "<td>" . $csv[$i]['Salary'] . "</td>";                        
                        echo "<td>" . $csv[$i]['Nature'] . "</td>";
                        echo "</tr>";                    
                        $total_row++;
                    }                                                          
                }

1 个答案:

答案 0 :(得分:1)

获取:index.php?page = 2&search =购买

清除页面= 1以进行新搜索

此功能是通过 get 方法而不是发布完成的,您可以通过适当地操作作为发布

<?php 
            // you can make this as post as you want
            // i have made this as a get param function

            $value = !empty($_GET['search']) ? $_GET['search'] : '';
            $filename = "Database.csv";
            $delimiter = ",";
            if (!file_exists($filename) || !is_readable($filename))
                return false;

            if ($delimiter == ',') {
                $csv = array_map('str_getcsv', file($filename));
            } else {
                $lines = file($filename);
                $line_num = count($lines);
                $dm = [];

                $csv = array_map('str_getcsv', $lines, array_pad($dm, $line_num, $delimiter));
            }

            array_walk($csv, function (&$row) use ($csv) {
                $row = array_combine($csv[0], $row);
            });

            array_shift($csv);
            $total_row_of_csv = count($csv);
            $countForPage = 0;
            for ($i = 0; $i < $total_row_of_csv; $i++) {
                    //var_dump($csv[$i]['Catagory']);die();
                    // didint get the $value so commented id
                    if (preg_match("/$value/i", $csv[$i]['Catagory'])) { 
                        $countForPage ++;
                    }
            }
            $countForPage;

            $numPerPage = 10;
            $numCurrPage = !empty($_GET['page']) ? $_GET['page'] : 1;
            $numFromCnt = $numPerPage * ($numCurrPage - 1);
            $numLastCnt = $numFromCnt + $numPerPage ;



            $total_row = 0;
            echo "<table>";
            for ($i = 0; $i < $total_row_of_csv; $i++) {

                    //var_dump($csv[$i]['Catagory']);die();
                    // didint get the $value so commented id
                    if (preg_match("/$value/i", $csv[$i]['Catagory'])) { 
                        //echo $total_row .">=". $numFromCnt ."&&". $total_row ."<". $numLastCnt; //die();
                        if($total_row >= $numFromCnt && $total_row < $numLastCnt) {                                                      
                        echo "<tr>";
                        echo "<td>" . $csv[$i]['Ref'] . "</td>";
                        echo "<td>" . $csv[$i]['Catagory'] . "</td>";
                        echo "<td>" . $csv[$i]['JobTitle'] . "</td>";
                        echo "<td>" . $csv[$i]['Description'] . "</td>";
                        echo "<td>" . $csv[$i]['Salary'] . "</td>";                        
                        echo "<td>" . $csv[$i]['Nature'] . "</td>";
                        echo "</tr>";                    

                     } 
                     $total_row++;
                    }

                }
                //echo $total_row;die();

            echo "</table>";

            $links = generateLinks($countForPage, $numCurrPage, $numPerPage, $value);

            echo $links;

        function generateLinks($total_row_of_csv, $numCurrPage, $numPerPage, $search){
            $pagLink = '';
            if($numCurrPage > 1) {
                $pagLink .= "<li class='active'><a href='csv_pagination.php?page="
                                                .($numCurrPage-1)."&search=".$search."'>Prev</a></li>";
            }
            // for ($i=1; $i<=$total_row_of_csv; $i++) { 
            //     if ($i==$numCurrPage) { 
            //         $pagLink .= "<li class='active'><a href='csv_pagination.php?page="
            //                                     .$i."'>".$i."</a></li>"; 
            //     } else  { 
            //         $pagLink .= "<li><a href='csv_pagination.php?page=".$i."'> 
            //                                     ".$i."</a></li>";   
            //     } 
            // } 

            if($numCurrPage < ($total_row_of_csv/$numPerPage)) {
                $pagLink .= "<li class='active'><a href='csv_pagination.php?page="
                                                .($numCurrPage+1)."&search=".$search."'>Next</a></li>";
            }
            return $pagLink;
        }
?>