我一直在尝试从数组中选择随机项而不重复相同的项目。
样本数组
$images=array();
$images[]=array('img'=>'bands.jpg','cat'=>'bands.php');
$images[]=array('img'=>'cake.jpg','cat'=>'cakes.php');
$images[]=array('img'=>'catering.jpg','cat'=>'catering.php');
$images[]=array('img'=>'dj.jpg','cat'=>'djs.php');
$images[]=array('img'=>'dress.jpg','cat'=>'dress_attire.php');
$images[]=array('img'=>'limos.jpg','cat'=>'limos_transportaion.php');
$images[]=array('img'=>'photography.jpg','cat'=>'photography.php');
$images[]=array('img'=>'venues.jpg','cat'=>'venues.php');
$images[]=array('img'=>'wedding_planer.jpg','cat'=>'planning.php');
我尝试了以下操作但由于某种原因它无法正常工作。它只是将数组中的第一项收集到渲染的计数中。 // $ adDisplay是介于1-9之间的数字
$rand = array_rand($images, $adDisplay);
foreach($rand as $key => $value){
echo'<a href="'.$images[$key]['cat'].'"><img src="img/banners/'.$images[$key]['img'].'" border="0" alt="" /></a>';
}
答案 0 :(得分:3)
这样做的很多方法,我可能会洗牌然后切片:
$images = array();
$images[]=array('img'=>'bands.jpg','cat'=>'bands.php');
$images[]=array('img'=>'cake.jpg','cat'=>'cakes.php');
$images[]=array('img'=>'catering.jpg','cat'=>'catering.php');
$images[]=array('img'=>'dj.jpg','cat'=>'djs.php');
$images[]=array('img'=>'dress.jpg','cat'=>'dress_attire.php');
$images[]=array('img'=>'limos.jpg','cat'=>'limos_transportaion.php');
$images[]=array('img'=>'photography.jpg','cat'=>'photography.php');
$images[]=array('img'=>'venues.jpg','cat'=>'venues.php');
$images[]=array('img'=>'wedding_planer.jpg','cat'=>'planning.php');
shuffle($images);
$adDisplay = 5;
foreach( array_slice($images,0,$adDisplay) as $image){
echo '<a href="' . htmlspecialchars($image['cat']) . '">'
. '<img src="img/banners/'
. htmlspecialchars($image['img']) . ' border="0" alt="" />'
. '</a>';
}
答案 1 :(得分:0)
array_rand
将随机键作为值返回。您实际上想要使用$images[$value]['cat']
。另请注意,如果请求了一个项目,array_rand
不会返回数组;你必须特别处理。
答案 2 :(得分:0)
键将是索引,值将是随机变量,因此使用值而不是键作为图像数组的索引。欢呼声。
答案 3 :(得分:0)
如果您希望数组按随机顺序使用shuffle
:
shuffle($images);
foreach($images as $img) {
echo($img['cat']);
}
或使用array_rand
获取随机密钥:
$key = array_rand($images);
echo($images[$key]['cat']);
答案 4 :(得分:0)
您可以简单地使用array_rand并将最新密钥存储在变量或某处
如果random_key == last_used_key则 Random_key + 1
不比那更难: - )
答案 5 :(得分:0)
替代建议:
$images = array();
$images[]=array('img'=>'bands.jpg','cat'=>'bands.php');
$images[]=array('img'=>'cake.jpg','cat'=>'cakes.php');
$images[]=array('img'=>'catering.jpg','cat'=>'catering.php');
$images[]=array('img'=>'dj.jpg','cat'=>'djs.php');
$images[]=array('img'=>'dress.jpg','cat'=>'dress_attire.php');
$images[]=array('img'=>'limos.jpg','cat'=>'limos_transportaion.php');
$images[]=array('img'=>'photography.jpg','cat'=>'photography.php');
$images[]=array('img'=>'venues.jpg','cat'=>'venues.php');
$images[]=array('img'=>'wedding_planer.jpg','cat'=>'planning.php');
for ($i = 0; $i < $adDisplay AND sizeof($images) > 1; $i++) {
$k = array_rand(0, sizeof($images)-1);
$image = $images[$k];
unset($images[$k];
sort($images);
echo '<a href="' . htmlspecialchars($image['cat']) . '">'
. '<img src="img/banners/'
. htmlspecialchars($image['img']) . ' border="0" alt="" />'
. '</a>';
}
因此,选择一个随机密钥,从数组中删除该记录,显示它并重新排序该数组以进行下一轮操作。一直持续到显示足够的记录或记录用完为止。