来自图片限制的文件夹中的图片库

时间:2017-03-29 22:45:57

标签: php html modx

下面有一些代码,但是我无法使用array_splice来限制显示的图像数量。

<?php
$id = $_GET['id'];
  if (empty($id)) { 
    $clientname = 'tazz';
} else {
    $clientname = $_GET['id'];
}

$total = $_GET['limit'];
  if (empty($total)) { 
    $limit = '100';
} else {
    $limit = $_GET['limit'];
}

$basefolder = "client/client-galleries/";
$dirname = $basefolder.$clientname."/";

    $images = scandir($dirname);
    sort($images);
    //shuffle($images);
    $ignore = array(".", "..");
    $output = array_splice($ignore, 0, $limit);

foreach($images as $curimg) {
        if(!in_array($curimg, $output)) {

echo "
    <div class='gallery'>
        <img src='[[pThumb? &input=`$dirname$curimg` &options=`&w=300&h=300&zc=1&q=95&fltr[]=wmi|./client/images/gallery-watermark-white.png|BL|50|25|200`]]' alt='$curimg'>
        <div class='desc'></div>
    </div>\n ";

        }
    }

这会正确显示图库中的图像,但不会限制http://website.address?id=client&limit=5

设置的图像数量

2 个答案:

答案 0 :(得分:0)

您未将array_splice应用于$images数组,而是应用于$ignore数组,该数组仅包含"."".."。此外,array_splice用于在数组中搜索/替换,您可能正在寻找array_slice,它用于获取数组的特定部分。

如果您使用array_diff$images中移除不需要的值,则可以使用array_slice仅保留最多$limit张图片。像这样:

$images = scandir($dirname);
$ignore = array(".", "..");
$images_filtered = array_diff($images, $ignore);
$images_limited = array_slice($images_filtered, 0, $limit);

$images_filtered应包含$images中不在$ignore内的所有项目。 $images_limited应包含$limit中的第一个$images_filtered项。

答案 1 :(得分:0)

您的代码存在一些问题,例如使用$ ignore数组而不是$ images数组。我做了一些改变,可能更接近你所追求的。

$limit = 5;
$dirname = "...";
$images = array_diff(scandir($dirname), [".", ".."]);
sort($images);
$limitedImages = array_slice($images, 0, 5);
foreach ($limitedImages as $curimg) {
   var_dump($curimg);
}