PHP类:如何从数组中获取随机值,而不在刷新时更改结果?

PHP类:如何从数组中获取随机值,而不在刷新时更改结果?,php,Php,我正在尝试完成一个简单的任务,其中我有一个5个值的数组,我需要多次随机化并在页面上显示结果 例如,我的数组可以是('color1','color2','color3','color4','color5') 我需要显示,比如说页面上有50个随机颜色的项目,项目的数量可能会根据其他因素增加或减少 当一个项目被指定了一种颜色,那么它将始终是该颜色,而不是每次我刷新页面时它都会改变 我目前使用的是array\u rand,每次刷新页面时,它都会随机化颜色shuffle似乎给了我所有项目完全相同的颜色 &

我正在尝试完成一个简单的任务,其中我有一个5个值的数组,我需要多次随机化并在页面上显示结果

例如,我的数组可以是
('color1','color2','color3','color4','color5')

我需要显示,比如说页面上有50个随机颜色的项目,项目的数量可能会根据其他因素增加或减少

当一个项目被指定了一种颜色,那么它将始终是该颜色,而不是每次我刷新页面时它都会改变

我目前使用的是
array\u 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;
?>

我认为这对您来说是有意义的:

<?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方法对于此类应该是静态的,但我将把它留给您。

选择您希望保存第一个随机结果的位置(例如会话、数据库、文件系统等)。页面加载检查是否已保存数据。如果是这样的话,请阅读它,否则将数组无序排列将项目分配给所需的dom对象并保存它们..我已更新了我的问题以更好地反映问题您的项目是否具有任何可区分的功能?例如,一个id、名称等,可以唯一地识别它们?@Jack此阶段没有设置任何内容,id、类或名称都可以。然后使用id%count($colors)作为索引感谢您的帮助,我已经更新了我的问题,以便更好地思考这个问题-我意识到它可能没有被正确询问。