0

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

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

我需要在页面上显示 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;
?>
4

1 回答 1

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 来标识该元素的颜色已经设置,因此我们可以轻松地将其存储在 session. 如果您不提供任何身份证明,您将无法做到这一点。

此外,我认为在这种情况下,该类的 colorArray 和 pickColor 方法应该是静态的,但我会把它留给你。

于 2012-12-03T07:00:03.440 回答