Hiển thị hình ảnh ngẫu nhiên từ folder chỉ định bằng PHP

29/07/2012

Hiển thị hình ảnh ngẫu nhiên từ folder chỉ định bằng PHP

Là một webmaster bạn cần phải làm nhiều thứ cho trang web của bạn, và đoạn code mà mình sắp chia sẻ đây sẽ giúp bạn có thêm một kinh nghiệm cho hành trình trở thành 1 webmaster chuyên nghiệp của bạn. Đoạn code này giúp bạn lấy ngẫu nhiên hình ảnh từ một folder chứa hình ảnh của bạn.
Và đoạn code này như sau :

<?php
function getRandomFromArray($ar) {
mt_srand( (double)microtime() * 1000000 );
$num = array_rand($ar);
return $ar[$num];
}

function getImagesFromDir($path) {
$images = array();
if ( $img_dir = @opendir($path) ) {
while ( false !== ($img_file = readdir($img_dir)) ) {
// checks for gif, jpg, png
if ( preg_match("/(\.gif|\.jpg|\.png)$/", $img_file) ) {
$images[] = $img_file;
}
}
closedir($img_dir);
}
return $images;
}

$root = '';
// nếu folder images không phải là thư mục con của đường dẫn file thì bạn phải tạo thế này
//$root = $_SERVER['DOCUMENT_ROOT'];
$path = 'images/';

//lấy danh sách hình ảnh từ đường dẫn
$imgList = getImagesFromDir($root . $path);

$img = getRandomFromArray($imgList);

?>

Để sử dụng bạn đặt thẻ img này sau đây vào vị trí mà bạn muốn hiển thị

<img src=”<?php echo $path . $img ?>” alt=”” />

Nếu bạn muốn lấy nhiều hơn 1 bức hình thì các bạn có thể sử dụng hàm sau :

function getImageFromArray($ar,$num) {
$image = array();
for($i=0;$i<$num;$i++)
{
$image[$i] = $ar[$i];
}
return $image;
}

Và lấy hình bằng cách khai báo :

$img =  getImageFromArray($imgList,4);

Với 4 là số lượng hình mà chúng ta muốn lấy. Và để hiển thị ngoài trang web thì các bạn sử dụng như sau :

<img src="<?php echo $path . $img[0] ?>" alt="" />
<img src="<?php echo $path . $img[1] ?>" alt="" />
<img src="<?php echo $path . $img[2] ?>" alt="" />
<img src="<?php echo $path . $img[3] ?>" alt="" />

Còn nếu muốn lấy hết hình trong folder thì thay bằng đoạn code sau :

$n = count($imgList);
$img =  getImageFromArray($imgList,$n);

Và khi cần lấy hình thì chạy vòng lặp sau là được:

<?php for($i=0;$i<$n;$i++) { ?>
<img src="<?php echo $path . $img[$i] ?>" alt="" />
<?php } ?>

Đoạn code trên chỉ là câu lệnh lấy hình đơn giản, bạn nào có sáng kiến tốt hơn xin chia sẻ với mọi người nha. Mình mong có sự đóng góp của các bạn để hoàn thiện code tốt hơn.

Chúc các bạn thành công !

Chuyên Mục:

Bài viết được đăng bởi webmaster

Nếu các bạn thấy bài viết hữu ích thì giúp mình Like cái nhé !
  • nếu muốn lấy 1 lúc 4 hình thí sao bác

    • Chào bạn, mình vừa thêm một hàm giúp bạn lấy 4 hình cùng một lúc, bạn xem lại bài viết nhá ! Chúc bạn thành công.

      • dohaininh

        admin cho em hỏi em muốn làm trọn 1 trang random.php khi mà truy cập hoặc f5 thì nó sẽ load ảnh ngẫu nhiên trong 1 folder chỉ định sẵn

        em mới học lớp 10 trình độ còn kém mong được chỉ giáo

        • Đơn giản thôi em, em chỉ việc lấy toàn bộ code ở phía trên và dán vào random.php là được thôi em

  • Thanks rất nhiều. Đúng thứ đang cần.
    Nhưng mình nghĩ nếu trong folder có nhiều hình. Mình muốn lấy ngẫu nhiên 4 hình.
    hoặc muốn lấy cả folder hình lên thì sao?

  • Guest

    Đơn giản thôi bạn,để hiển thị hết số hình có trong folder thì bạn thêm dòng code sau :
    $n = count($imgList); // Đếm số hình có trong folder
    $img = getImageFromArray($imgList,$n);
    Rồi khi hiển thị thì bạn cho vòng lặp này là okie :

    for($i=0;$i<$n;$i++) {

    }

    Chúc bạn thành công !

  • cogau

    Xin phép bổ sung thêm hàm lấy “ngẩu nhiên không trung lặp” số lượng $num các đối tượng chứa trong mảng

    trả về mảng các giá trị

    function getArrayRandom($array, $num) {
    $result = array();
    while(count($result) <= $num) {
    $item = getRandomFromArray($array);
    if(array_key_exists($item, $result) == FALSE)
    $result[] = $item;
    }
    return $result;
    }

  • Master Quốc Duẩn

    lấy hết hình trong thư mục thì ảnh bị trùng.phải làm sao ạ

  • nhóc con

    cho mình hỏi muốn hiển thị toàn bộ ảnh trong cột image_list của bảng trong database ra trang chi tiết thì làm thế nào?