2011-04-30 41 views
7

我有以下图像,我正在使用传送带。每次页面加载时,我都希望它们按不同的顺序排列。我正在考虑使用随机数字生成器来排序数字,但是我不确定如何制作数字,因此数字只能使用一次。如果这可以在一个循环中完成,所以可扩展性会很好。在php中洗牌的图像顺序

请参见下面的静态代码,所有图像都被命名​​除了在年底

 <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> 

感谢数相同!

回答

10

没有为一个函数,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

哇... ...洗牌甚至没有想到找这件事。谢谢! – Bill 2011-04-30 12:56:20

+0

@Phil:没问题,PHP内置几乎所有功能。 =) – 2011-04-30 13:03:10

+0

** [Off Topic] **:有趣的是,最简单的答案总是得到大量的最高票数,而复杂的答案不会... – 2011-04-30 19:29:07

1

创建数字/图像名称的数组,然后洗牌数组,然后输出它,像这样。

$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.'" />'; 
} 

您可以调整上述代码以适应您的需求。

2

假设你知道有多少图像(比如4)你想和所有的图像可达,这个数字是有效的,从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"; 

该解决方案是它的好处将自动检测图像文件夹中所有名为carousel-X.jpg的图像,并将它们用于旋​​转木马。

甚至:

<?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'通过引用和返回操作数组表示成功或失败的布尔值。所以你必须把它传递给一个变量(而不是表达式),并且你的结果将在传入的变量中,而不是在函数返回值中。 – Mikkel 2015-06-02 16:11:45

+0

欣赏评论和更正,Mikkel。我更新了我的答案以反映这一点。 – 2015-06-11 15:10:40