我有一个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++;
}
}
答案 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;
}
?>