【问题标题】:PHP random colors for every row每行的PHP随机颜色
【发布时间】:2016-01-18 01:56:05
【问题描述】:

我正在使用 chart.js 制作饼图。我希望 while 循环生成的每个切片都有不同的颜色。

$pull_request = 'SELECT * FROM `oc_aa_affiliatecollclicktracking`';
$sqli = $db->query($pull_request);

$num_rows=mysqli_num_rows($sqli);
$cur_row=0;
var pieData = [
                <?php 
                while ($row = mysqli_fetch_array($sqli)) {      
                $color=intval(256*$cur_row/($num_rows-1));
                $cur_row++;
                echo    '{
                            value: '.$row["product_clicks"].',
                            color: "rgb(256,'.$color.')", // NEED TO BE RANDOM FOR EVERY ROW/SLICE
                            highlight: "#333",
                            label: "' .$row["product_id"].'"
                            },';
                }
                ?>
                ];

                var ctx = document.getElementById("chart-area").getContext("2d");
                window.myPie = new Chart(ctx).Pie(pieData);

} );

我发现随机颜色会在整个图表的页面刷新时发生变化,但对于单个切片则不会。有什么想法吗?

【问题讨论】:

  • 您需要将#999 变成一个变量,然后在每次迭代时更改它。
  • 只需将您找到的示例放在 while 循环中,以便在每个循环中触发它。
  • 编辑了我的代码,请看一下
  • 您可以从标签生成哈希,并屏蔽低 3 个字节,使用它作为您的颜色代码,这意味着相同的标签将始终映射到相同的颜色。有时它可能会选择不受欢迎的颜色。另一种方法是使用一组好的颜色,按标签对 SQL 输出进行排序,然后在循环时从数组中弹出颜色。这意味着它将非常稳定,只有在出现新标签时才会改变颜色。

标签: php jquery


【解决方案1】:

如果您希望颜色随机明显地变化,您将需要一个 javascript 解决方案,或者如果您希望每次页面加载时每个切片都具有不同的颜色,您可以使用类似的东西?

<?php 

function randomColour() {
    // Found here https://css-tricks.com/snippets/php/random-hex-color/
    $rand = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f');
    $color = '#'.$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)];
    return $color;
}

while ($row = mysqli_fetch_array($sqli)) {                  
    echo    '{
        value: '.$row["product_clicks"].',
        color: '.randomColour().', // NEED TO BE RANDOM FOR EVERY ROW/SLICE
        highlight: "#333",
        label: "' .$row["product_id"].'"
    },';
}
?>

如果您需要 javascript 解决方案,它会更复杂,因为我不知道 .Pie() 构造函数中会发生什么,以及如何将变色元素挂接到其中

【讨论】:

    【解决方案2】:

    您可以使用rand() 函数获取特定范围内的随机数。 看看here

    例子:

    $color = "#" . rand(10,100);
    

    您可以随意替换 $color。

    如果你想要十六进制颜色使用这个函数

    function random_color(){
        mt_srand((double)microtime()*1000000);
        $c = '';
        while(strlen($c)<6){
            $c .= sprintf("%02X", mt_rand(0, 255));
        }
        return $c;
    }
    

    【讨论】:

      猜你喜欢
      • 2014-09-08
      • 2013-04-02
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      • 2017-05-18
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多