2011-04-30 15 views
7

Tengo las siguientes imágenes que estoy usando para un carrusel. Cada vez que carga la página, los quiero en un orden diferente. Estaba pensando en ordenar los números usando un generador de números aleatorios, pero no estoy seguro de cómo hacerlo para que los números se usen solo una vez. Si esto se pudiera hacer en un bucle, sería ampliable.orden aleatorio de imágenes en php

ver el código estático a continuación, todas las imágenes se nombran los mismos, excepto para el número al final

 <div class="image-entry"> 
      <img src="/images/carousel-1.jpg" /> 
     </div> 
     <div class="image-entry"> 
      <img src="/images/carousel-2.jpg" /> 
     </div> 
     <div class="image-entry"> 
      <img src="/images/carousel-3.jpg" /> 
     </div> 
     <div class="image-entry"> 
      <img src="/images/carousel-4.jpg" /> 
     </div> 

gracias!

Respuesta

10

Hay una función para la que, shuffle():

$images = array 
(
    '/images/carousel-1.jpg', 
    '/images/carousel-2.jpg', 
    '/images/carousel-3.jpg', 
    '/images/carousel-4.jpg', 
); 

shuffle($images); // the magic 

foreach ($images as $image) 
{ 
    echo '<div class="image-entry">'; 
    echo "\t" . '<img src="' . $image . '" />'; 
    echo '</div>'; 
} 
+0

wow ... se mezclan ... ni siquiera pensé en busca de eso. ¡Gracias! – Bill

+0

@Phil: No hay problema, PHP tiene funciones integradas para casi todo. =) –

+0

** [Off Topic] **: Es curioso cómo las respuestas más simples siempre obtienen un gran número de votos positivos, mientras que las complejas no ... –

1

crear una matriz de los números/nombres de imagen y luego baraja la matriz, y luego la salida que, como tal.

$images[0] = 'car-1.jpg'; 
$images[1] = 'car-2.jpg'; 
$images[2] = 'car-3.jpg'; 

shuffle($images); 

foreach($images as $img){ 
    echo '<img src="'.$img.'" />'; 
} 

Puede adaptar el código anterior para que se ajuste a sus necesidades.

2

Suponiendo que usted sabe la cantidad de imágenes (por ejemplo 4) que desea y que todas las imágenes hasta ese número es válido y empezar con 1:

<?php 
$images = range(1, 4); 
shuffle($images); 

foreach ($images as $_) { 
    echo <<<HTML 
     <div class="image-entry"> 
     <img src="/images/carousel-$_.jpg" /> 
     </div> 
HTML; 
} 
1
<?php 
$imageArr = glob(rtrim($_SERVER['DOCUMENT_ROOT'] , '/').'/images/carousel-*.jpg'); 
shuffle($imageArr); 
$outPattern = '<div class="image-entry"><img src="%s" /></div>'; 
foreach($imageArr as $carImage) 
    echo sprintf($outPattern , $carImage)."\n"; 

Los beneficios de esta solución es que se Automáticamente detectará todas las imágenes llamadas carousel-X.jpg en la carpeta de imágenes y las usará en el carrusel.

O incluso:

<?php 
$imageArr = glob(rtrim($_SERVER['DOCUMENT_ROOT'] , '/').'/images/carousel-*.jpg'); 
shuffle($imageArr); 
if(count($imageArr)){ 
    echo '<div class="image-entry"><img src="'.implode('" /></div><div class="image-entry"><img src="' , $imageArr).'" /></div>'; 
}else{ 
    echo '<!-- No Images in Array //-->'; 
} 
+0

'shuffle' opera en una matriz por referencia y regresa un booleano que indica éxito o falla. Entonces debe pasarle una variable (no una expresión), y su resultado estará en la variable pasada, no en el valor de retorno de la función. – Mikkel

+0

Apreciar el comentario y la corrección, Mikkel. Actualicé mi respuesta para reflejar esto. –