Cetanu Posted February 20, 2011 Share Posted February 20, 2011 Hi! I'm currently developing a photography portfolio for a friend. To display his images, rather than using a database and allowing it to get massive, I've decided to go ahead and stick them into a directory and then cycle through it. As it's currently set up, I open the directory and read it, use preg_split() to divide the files up according to file type, and then use a foreach() statement to display them. It works like a charm. But now I have a problem: I want to limit the amount of files that are echoed out. I've tried everything. Using this: $i = 0; foreach($images as $image){ // blahblahblah $i++ if($i > 10){ break; } } And that doesn't work. :| And I also decided to try and count() the array and stuff. Nothing worked. Furthermore, print_r() returns this: Array ( [0] => [1] => a_message.jpg [2] => ) Array ( [0] => [1] => cold_call.jpg [2] => ) Array ( [0] => [1] => ring_of_love.jpg [2] => ) Array ( [0] => thumbs ) Array ( [0] => [1] => unclear.jpg [2] => ) Isn't it supposed to return ONE array with different keys?! >.> Here is the code: $img_dir = "images/photographs/"; if(is_dir($img_dir)){ if($img_handle = opendir($img_dir)){ echo "<div id=\"index_thumbnails\"><div id=\"hidden_images\">"; while(($img = readdir($img_handle)) !== false){ if($img !== "Thumbs.db" && $img !== "." && $img !== ".."){ $images = preg_split('/([a-zA-Z0-9_-]*\.jpg$)/', $img, 0, PREG_SPLIT_DELIM_CAPTURE); if(empty($images)){ echo "<b>Sorry, there are no images to display!</b>"; } else{ foreach($images as $img_display){ if($img_display !== "" && $img_display !== "thumbs"){ $img_name = "images/photographs/{$img_display}"; $thumb_path = "images/photographs/thumbs/"; $size = getimagesize($img_name); $width = $size['0']; $height = $size['1']; $nwidth = round($width/20); $nheight = round($height/20); $img_thumb = imagecreatefromjpeg("{$img_name}"); $resized = imagecreatetruecolor($nwidth, $nheight); imagecopyresampled($resized, $img_thumb, 0, 0, 0, 0, $nwidth, $nheight, $width, $height); imagejpeg($resized, "{$thumb_path}{$img}_thumb.jpg"); echo "<img src=\"{$thumb_path}{$img}_thumb.jpg\" height=\"{$nheight}\" width=\"{$nwidth}\"/>"; } } } print_r($images); } } closedir($img_handle); echo "</div></div>"; } } Bear with the fact that I'm not using a function to shrink my images. xD I'm getting all of the work out of the way before I make a function and link it to a database to get image information. All help is appreciated! Thank you! Quote Link to comment https://forums.phpfreaks.com/topic/228298-preg_split-on-file-names/ Share on other sites More sharing options...
silkfire Posted February 20, 2011 Share Posted February 20, 2011 Return a slice of your array: $imgarray = array_slice($imgarray, 0, 10); Quote Link to comment https://forums.phpfreaks.com/topic/228298-preg_split-on-file-names/#findComment-1177270 Share on other sites More sharing options...
.josh Posted February 20, 2011 Share Posted February 20, 2011 <?php // image and thumb paths $img_dir = "images/photographs/"; $thumb_path = "images/photographs/thumbs/"; // get first $amount of images from dir $amount=3; $images = array_map('basename',glob($img_dir . "*.jpg")); $images = array_slice($images,0,$amount); // create and output thumbs foreach ($images as $image) { $size = getimagesize($img_dir.$image); $width = $size['0']; $height = $size['1']; $nwidth = round($width/20); $nheight = round($height/20); $img_thumb = imagecreatefromjpeg($img_dir.$image); $resized = imagecreatetruecolor($nwidth, $nheight); imagecopyresampled($resized, $img_thumb, 0, 0, 0, 0, $nwidth, $nheight, $width, $height); imagejpeg($resized, $thumb_path.$image); echo "<img src='{$thumb_path.$image}' height='{$nheight}' width='{$nwidth}'/>"; } // end foreach ?> Quote Link to comment https://forums.phpfreaks.com/topic/228298-preg_split-on-file-names/#findComment-1177279 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.