array_slice页面编号

时间:2015-03-27 13:07:35

标签: php arrays

此脚本获取文件夹中的每个图像并在网页上显示。有没有办法像每1,2张图片一样显示像1,2,3,4,5之类的简单页码?到目前为止我尝试的一切都没有用。

   <?php

        # To prevent browser error output
        header('Content-Type: text/javascript; charset=UTF-8');
        # Path to image folder
        $imagefolder = 'img/';
        # Show only these file types in the image folder
        $imagetypes = '{*.jpg,*.JPG,*.JPEG,*.png,*.PNG,*.gif,*.GIF}';
        # Add images to array
        $images = glob($imagefolder.$imagetypes, GLOB_BRACE);
        # Sort the images based on its 'last modified' time stamp
        $sortedImages = array();
        $count = count($images);
        for ($i = 0; $i < $count; $i++) {
            $sortedImages[date ('YmdHis', filemtime($images[$i])).$i] = $images[$i];
        }

        # Set to 'false' if you want the oldest images to appear first
        $newest_images_first = true;
        # Sort images in array
        if($newest_images_first) {
            krsort($sortedImages);
        } else {
            ksort($sortedImages);
        }

        # Generate the HTML output
        writeHtml('<ul class="ins-imgs">');
        foreach ($sortedImages as $image) {
            # Get the name of the image, stripped from image folder path and file type extension
            $name = 'Image name: '.substr($image,strlen($imagefolder),strpos($image, '.')-strlen($imagefolder));
            # Get the 'last modified' time stamp, make it human readable
            $last_modified = '(last modified: '.date('F d Y H:i:s', filemtime($image)).')';
            # Begin adding
            writeHtml('<li class="ins-imgs-li">');
            writeHtml('<div class="ins-imgs-label">'.$name.' '.$last_modified.'</div>');
            writeHtml('<div class="ins-imgs-img"><a name="'.$image.'" href="#'.$image.'">');
            writeHtml('<img src="'.$image.'" alt="'. $name.'" title="'. $name.'">');
            writeHtml('</a></div>');
            writeHtml('</li>');
        }
        writeHtml('</ul>');
        writeHtml('<link rel="stylesheet" type="text/css" href="ins-imgs.css">');
        # Convert HTML to JS
        function writeHtml($html) {
            echo "document.write('".$html."');\n";



        }

    ?>

2 个答案:

答案 0 :(得分:1)

鉴于您说您不是PHP主人,我将展示我的解决方案并逐步解释。
我希望你能发现它有用。

这是我用于分页的循环:

for($i = (($page-1)*$perPage); $i < min(($page*$perPage), $total); $i++) {
    }

我将使用它来创建一个新元素,其元素 11-20 21-30 ,等等。

首先,我删除了.$i数组索引中的$sortedImages(代码的第15行行)

for ($i = 0; $i < $count; $i++) {
    $sortedImages[date ('YmdHis', filemtime($images[$i]))] = $images[$i]; #15th Row
}

因为它使索引有点混乱(下一步是必要的)。

然后我使用 0到N 索引创建一个新数组,这使得代码整洁(我这样做是为了尽可能少地更改代码),然后用{{{{{ 1}}数组。

$sortedImages

最后是分页的实施:

$k = 0; # The new index
$newArray = array(); # The new array
foreach($sortedImages as $soImg) {
    $newArray[$k] = $soImg; 
    $k++;
}

变量:

  • $page = $_GET["page"]; $perPage = 3; $total = $count; for ($i = (($page-1)*$perPage); $i < min(($page*$perPage), $total); $i++) { $newSortedImages[$i] = $newArray[$i]; } 是从网址返回的网页编号($page = $_GET["page"];superglobal array
  • $_GET[]是每页显示的元素数量
  • $perPage$total = $count;数组(第13行)
  • 的编号

循环:

  • $images是循环的开始,如果页面 1 ,循环应该从 0 开始,那么表达式$i = (($page-1)*$perPage)会使工作
  • (($page-1)*$perPage)是循环的结尾,min() function找到其参数之间的最低值,在例如最后一页包含4个元素,预计有6个元素。

然后你只需要将数组更改为从$i < min(($page*$perPage), $total)$sortedImages的代码的第29行循环。

对于分页控件,请使用:

$newSortedImages

以下是新的代码实现:

$nextPage = $page + 1;
$prevPage = $page - 1;

对于页码编号,您必须知道元素的总数并将其除以# To prevent browser error output header('Content-Type: text/javascript; charset=UTF-8'); # Path to image folder $imagefolder = 'img/'; # Show only these file types in the image folder $imagetypes = '{*.jpg,*.JPG,*.JPEG,*.png,*.PNG,*.gif,*.GIF}'; # Add images to array $images = glob($imagefolder.$imagetypes, GLOB_BRACE); # Sort the images based on its 'last modified' time stamp $sortedImages = array(); $count = count($images); for ($i = 0; $i < $count; $i++) { $sortedImages[date ('YmdHis', filemtime($images[$i])).$i] = $images[$i]; } # Set to 'false' if you want the oldest images to appear first $newest_images_first = true; # Sort images in array if($newest_images_first) { krsort($sortedImages); } else { ksort($sortedImages); } # Now I give an index from 0 to N to the new array to make it work with pagination loop $k = 0; # The new index $newArray = array(); # The new array foreach($sortedImages as $soImg) { $newArray[$k] = $soImg; $k++; } $page = $_GET["page"]; $perPage = 3; $total = $count; for ($i = (($page-1)*$perPage); $i < min(($page*$perPage), $total); $i++) { $newSortedImages[$i] = $newArray[$i]; } # Generate the HTML output writeHtml('<ul class="ins-imgs">'); foreach ($newSortedImages as $image) { # Get the name of the image, stripped from image folder path and file type extension $name = 'Image name: '.substr($image,strlen($imagefolder),strpos($image, '.')-strlen($imagefolder)); # Get the 'last modified' time stamp, make it human readable $last_modified = '(last modified: '.date('F d Y H:i:s', filemtime($image)).')'; # Begin adding writeHtml('<li class="ins-imgs-li">'); writeHtml('<div class="ins-imgs-label">'.$name.' '.$last_modified.'</div>'); writeHtml('<div class="ins-imgs-img"><a name="'.$image.'" href="#'.$image.'">'); writeHtml('<img src="'.$image.'" alt="'. $name.'" title="'. $name.'">'); writeHtml('</a></div>'); writeHtml('</li>'); } writeHtml('</ul>'); writeHtml('<link rel="stylesheet" type="text/css" href="ins-imgs.css">'); # Convert HTML to JS function writeHtml($html) { echo "document.write('".$html."');\n"; } 元素,显然结果必须是整数,因此您将使用ceil() function

来自php.net

  

如有必要,通过舍入值返回下一个最高整数值。

$perPage

然后用它来显示peges数字:

$pages = ceil($count / $perPage);

答案 1 :(得分:0)

您不需要数据库来实现简单的分页。

$currentpage = $_GET['p'];
for ($i = ($currentpage*$pageSize); $i<sortedImages as $image) {

  // your HTML output here

}

for($i = 0; $i < $sortedImages/$pageSize; $i++){
  writeHtml('<a href=/?p='.$i + 1.'/>');
}

这只是一个例子,如果你剪掉'粘贴,可能就行不通了。但是那里可以让你很好地了解它是如何实现的。