2017-03-29 33 views
1

我有一些代碼在下面,但我不能得到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

回答

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應該包含來自$images_filtered的第一個$limit項。

+0

感謝堆@rickdenhann我一直在尋找這個這麼長時間,我甚至沒有選擇它。做得好。 –

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); 
}