2009-11-19 84 views
15

Tôi có một thư mục có tên là hình ảnh/mẹo.Cách lấy hình ảnh ngẫu nhiên từ thư mục bằng cách sử dụng PHP

Bây giờ trong thư mục đó, tôi có nhiều hình ảnh có thể thay đổi.

Tôi muốn tập lệnh PHP đọc thư mục, để tìm hình ảnh, và trong số những hình ảnh được tìm thấy để chọn một hình ảnh ngẫu nhiên.

Bất kỳ ý tưởng nào về cách thực hiện việc này?

Trả lời

53
$imagesDir = 'images/tips/'; 

$images = glob($imagesDir . '*.{jpg,jpeg,png,gif}', GLOB_BRACE); 

$randomImage = $images[array_rand($images)]; // See comments 

Bạn có thể gửi một cuộc tranh luận thứ 2 đến array_rand() để nhận được nhiều hơn 1.

+4

Thực ra, bạn phải làm $ randomImage = $ images [array_rand ($ images)]; Từ hướng dẫn sử dụng: "array_rand() trả về khóa cho mục nhập ngẫu nhiên". – JAL

+1

cảm ơn bạn thân, đã làm việc một cách hoàn hảo Webiste này rất tuyệt vời để được trợ giúp. Có tùy chọn nào khi một số nhận xét được đăng hoặc câu trả lời được gửi cho tôi vì tôi có ba câu trả lời và tôi không nhận được email, tôi đã chọn hộp thông báo nhưng vẫn không thể nhận được email –

+0

@ Mirror51 trên meta.stackoverflow.com – alex

4
$images = glob('images/tips/*'); 
return $images[rand(0, count($images) - 1)]; 

Tuy nhiên, điều này không đảm bảo rằng cùng một hình ảnh không được chọn hai lần liên tiếp.

+4

Việc thêm bảo hiểm đó sẽ làm giảm sự ngẫu nhiên. Nó cũng có thể giới thiệu lỗi. – wallyk

+0

Tôi không có đầu mối nào hàm glob() tồn tại. Tốt đẹp. – keithjgrant

0

Bạn có thể sử dụng opendir() để đọc trong tên tệp từ thư mục đó, lưu trữ từng tên tệp trong một mảng. Sau đó, sử dụng rand() với phút và tối đa tương ứng với các phím mảng của bạn để chọn một mục từ mảng đó.

-1

tải thư mục với hình ảnh:

$folder = opendir(images/tips/); 

xây dựng bảng ra các tập tin/hình ảnh từ thư mục:

$i = 0; 
while(false !=($file = readdir($folder))){ 
if($file != "." && $file != ".."){ 
    $images[$i]= $file; 
    $i++; 
    } 
} 

Chọn ngẫu nhiên:

$random_img=rand(0,count($images)-1); 

Hiển thị trên trang:

echo '<img src="images/tips'.$images[$random_img].'" alt="" />'; 

Hy vọng điều đó sẽ hữu ích. Tất nhiên kèm theo nó trong <?php ?>.

+1

Hai vấn đề. Bạn không cần một dấu gạch chéo sau khi 'lời khuyên'? Và tại sao không chỉ làm '$ hình ảnh [] = $ file' và quên truy cập? – mpen

1
<?php 
    foreach (glob("gallery/*") as $filename) { 
     echo '<li><a href="'.$filename.'" title=""><img src="'.$filename.'" alt="" /></a> </li>';  
     } 
?> 

Nhìn vào mã này, sử dụng nó chắc chắn nếu có ích cho bạn. Nó tải tất cả các tập tin từ thư mục và in chúng ở định dạng trên. Tôi đã tạo mã này để sử dụng với hộp đèn.

0

đơn giản:

$directory = "medias/photos/"; 
$img = glob($directory . "*.jpg"); 
shuffle($img); 
+2

Đơn giản hơn cái gì? – alex

+0

Vấn đề là, điều này sẽ chỉ tìm thấy hình ảnh 'jpg', và nó thực hiện rất nhiều công việc không cần thiết bằng cách xáo trộn toàn bộ mảng (có thể hoặc không có vấn đề, tùy thuộc vào số lượng ảnh bạn có trong thư mục). – alex

1
function get_rand_img($dir) 
{ 
    $arr = array(); 
    $list = scandir($dir); 
    foreach($list as $file) 
    { 
     if(!isset($img)) 
     { 
      $img = ''; 
     } 
     if(is_file($dir . '/' . $file)) 
     { 
      $ext = end(explode('.', $file)); 
      if($ext == 'gif' || $ext == 'jpeg' || $ext == 'jpg' || $ext == 'png' || $ext == 'GIF' || $ext == 'JPEG' || $ext == 'JPG' || $ext == 'PNG') 
      { 
       array_push($arr, $file); 
       $img = $file; 
      } 
     } 
    } 
    if($img != '') 
    { 
     $img = array_rand($arr); 
     $img = $arr[$img]; 
    } 
    $img = str_replace("'", "\'", $img); 
    $img = str_replace(" ", "%20", $img); 
    return $img; 
} 


echo get_rand_img('images'); 

thay thế 'hình ảnh' với thư mục của bạn.

1

Đồng ý với alexa. Sử dụng chức năng đơn giản.

function RandImg($dir) 
{ 
$images = glob($dir . '*.{jpg,jpeg,png,gif}', GLOB_BRACE); 

$randomImage = $images[array_rand($images)]; 
return $randomImage; 
} 

$the_image = RandImg('images/tips/'); 
echo $the_image; 
Các vấn đề liên quan