2012-12-21 182 views
2

我一直試圖從數組中選擇隨機項而不重複相同的項目。php從數組中選擇多個隨機密鑰

樣品陣列

$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>'; 
} 
+1

$ value,而不是$ key。 '$圖像[$值] [ '貓']' – goat

回答

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>'; 
} 
0

array_rand返回隨機。你實際上想要使用$images[$value]['cat']。另外請記住,如果請求一個項目,array_rand不返回數組;你必須特別處理。

0

關鍵將是索引,值將是隨機變量,因此使用值而不是鍵作爲您的圖像數組的索引。乾杯。

0

使用shuffle如果你希望你的陣列以隨機順序:

shuffle($images); 

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

或者使用array_rand來獲得一個隨機密鑰:

$key = array_rand($images); 

echo($images[$key]['cat']); 
0

你可以簡單地使用array_rand並存儲最新的關鍵變量上或其他地方

如果random_key == last_used_key然後 Random_key + 1

比:-)不是更難

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

所以,挑選一個隨機鍵,將該記錄從數組中移除,顯示它並重新排列數組以便下一個回合。一直持續到顯示足夠的數量或者記錄用完。