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');

我尝试了以下方法,但由于某种原因它无法正常工作。它仅将数组中的第一项收集到呈现的计数中。// $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>';
}
4

6 回答 6

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>';
}
于 2012-12-21T22:26:32.860 回答
0

array_rand returns the random keys as values. You actually want to use $images[$value]['cat']. Also keep in mind that array_rand does not return an array if one item is requested; you must handle that specially.

于 2012-12-21T22:14:19.440 回答
0

The key will be the index, value will be the random variable, thus use value instead of key as the index into your images array. Cheers.

于 2012-12-21T22:15:55.020 回答
0

shuffle如果您希望数组以随机顺序使用,请使用:

shuffle($images);

foreach($images as $img) {
    echo($img['cat']);
}

或用于array_rand获取随机密钥:

$key = array_rand($images);

echo($images[$key]['cat']);
于 2012-12-21T22:40:08.397 回答
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>';
}

因此,选择一个随机键,从数组中删除该记录,显示它并为下一轮重新排序数组。继续,直到显示足够多或记录用完为止。

于 2013-11-04T15:44:33.450 回答
0

您可以简单地使用 array_rand 并将最新的密钥存储在变量或某处

如果 random_key == last_used_key 那么 Random_key+1

不比这更难:-)

于 2013-03-31T10:38:35.503 回答