2012-12-03 23 views
0

我想完成一個簡單的任務,我有一個數組,其中有5個值,我需要隨機多次並在頁面上顯示結果。例如,我的數組可能是('color1','color2','color3','color4','color5')PHP類:如何從數組中獲取隨機值而不刷新結果?

我需要在隨機顏色的頁面上顯示50個項目,項目數量可能會增加或減少,具體取決於其他因素。

當一個項目被分配了一種顏色,那麼它將永遠是那種顏色,而不是每次刷新頁面時都改變。

我目前使用的是array_rand,每次刷新頁面時都會隨機顯示顏色。 shuffle似乎給我在所有項目上完全相同的顏色。

<?php 
class Item{ 
    public $color; 
    public $colorArray = array('#000','#fff','#0008b2','#0f9d00','#fff600'); 

    public function __construct() { 
     $this->color = $this->pickColor($this->colorArray); 
    } 

    public function pickColor($colors) {   
     $randNum = array_rand($colors); 
     $this->color = $this->colorArray[$randNum]; 
     return $this->color; 
    } 
} 
?> 

然後我的索引頁,我有:

<?php 
    $item = new Item(); 
    echo $item->color; 
?> 
+2

比在會話中存儲 –

+0

選擇要保存第一個隨機結果(例如會話,數據庫,文件系統等)的位置。在網頁加載時檢查您是否已保存數據。如果是這樣讀取,否則洗牌您的陣列分配項目所需的DOM對象,並保存它們。 – Leri

+0

我已更新我的問題,以更好地反映問題 – muudless

回答

0

我認爲這會讓你感覺:

<?php 
class Item{ 

    public $id; 
    public $color; 
    public $colorArray = array('#000','#fff','#0008b2','#0f9d00','#fff600'); 

    public function __construct($id) { 

     $this->id = $id; 

     if(!empty($_SESSION['element_' . $id])) { 
      $this->color = $_SESSION['element_' . $id]; 
     } 
     else { 
      $this->color = $this->pickColor($this->colorArray); 
     } 
    } 

    public function pickColor($colors) {   
     return $colors[rand(0, count($colors))]; 
    } 
} 
?> 

<?php 
$_SESSION['element_4'] = 'color of carrot'; 

for($i = 0; $i < 50; $i++) { 
    $temp = new Item($i); 
    echo($temp->color . '<br/>'); 
} 

die('Done'); 
?> 

測試它通過刷新 - 元件4將始終具有相同的價值:'胡蘿蔔的顏色'。

這段代碼是基於你的問題下的評論。


更新:我增加了一些ID,以確定該元素的顏色已經被設置,所以我們可以很容易地將它存儲在會話中。如果你不提供任何身份證明,你將無法做到。

另外我認爲colorArray和pickColor方法在這種情況下應該是靜態的,但是我會把它留給你。

+0

感謝您的幫助,我已更新我的問題以更好地反映這個問題 - 我意識到它可能沒有被正確詢問。 – muudless

+0

我已經更新了我的答案。 – Karol