2013-01-16 63 views
1

可能重複:
Output array elements randomly with PHPphp的最大值以隨機順序顯示在列表中?

比方說我們有這樣的代碼:

<? if (isset($specialoffers)) { ?> 
    <? foreach ($specialoffers as $value) { ?> 

     <div>product #</div> 

    <?};?> 
<?};?> 

例如這個名單可能會有所不同,每次,它可能有1個產品,和它可能有58個產品。我希望在列表中以隨機順序顯示10種產品。

如何做到這一點?

我不想觸摸SQL查詢!

回答

2

查看array_rand函數,該函數從數組中獲取一個或多個隨機元素。

所以,你可以做一些線沿線的:

foreach (array_rand($specialoffers,10) as $key) 
do_something_interesting_with $specialoffers[$key]; 
+0

如果我這樣做,它將只顯示10個位置,但是我沒有看到:產品名稱,價格,圖片....我甚至將$鍵更改爲$ value ...仍然沒有改變! – user1978483

+1

您對$ specialoffers數組的內容沒有任何說明。 $ specialoffers [$ key]會給你數組中的對應值 - 取決於它是什麼(它聽起來可能是另一個數組),你必須明確地處理它。 – borrible

1
$specialoffers = array_splice(shuffle($specialoffers), 0, 9); 

這樣的事情可能會奏效。

+0

shuffle返回一個布爾值,所以這不起作用 – Gordon

+0

'shuffle'就地將數組隨機化。 –

+0

看起來這兩個函數就地改變了數組,所以我的錯誤! – Frank

0

請嘗試從assoc數組中獲得隨機值的示例;

function array_random_assoc($arr, $num = 1) { 
     $keys = array_keys($arr); 
     shuffle($keys); 

     $r = array(); 
     for ($i = 0; $i < $num; $i++) { 
      $r[$keys[$i]] = $arr[$keys[$i]]; 
     } 
     return $r; 
    } 

    $specialoffers = (array_random_assoc($data_array, 10));