PHP中所有RGB排列的数组

时间:2014-01-21 20:59:41

标签: php arrays permutation rgb

我正在尝试使用RGB值制作所有可能颜色的数组。 r = 0 b = 0 g = 0到r = 255 b = 255 g = 255之间的每个排列。我的函数的想法是,当它被调用时,你提供一个限制数,以便该函数返回一个RGB值的数组,直到这个数字,以阻止它返回所有1600万。我下面的代码返回767个排列(256 * 3)如何让这个返回完整的1600万到我提供的限制数量?

function colourArray($number) {

    $r = 0;

    $g = 0;

    $b = 0;

    $i = 0;

    while ($i <= $number) {

        $colours[] = array($r,$g,$b);

        $r++;

        $i++;

    }

    $i = 0;

    while ($i <= $number) {

        $colours[] = array($r,$g,$b);

        $g++;

        $i++;

    }

    $i = 0;

    while ($i <= $number) {

        $colours[] = array($r,$g,$b);

        $b++;

        $i++;

    }


    return $colours;

}

2 个答案:

答案 0 :(得分:1)

嵌套你的循环就是一招。请尝试以下示例。我已经使用PHP范围函数用foreach-loops替换了你的while循环,并且在彼此之内嵌套了(即loop-inside-a-loop):

function colourArray($number) {
        $colours = array();
        foreach(range(0,$number) as $r) {
            foreach(range(0,$number) as $g) {
                foreach(range(0,$number) as $b) {
                    $colours[] = array($r,$g,$b);
                }
            }
        }
        return $colours;
}

<强>参考

http://php.net/range

http://php.net/manual/en/control-structures.foreach.php

答案 1 :(得分:1)

我几乎同意DickW,但我偏爱for()循环数值范围。

<?php

function color_array($range)
{
    $result = array();

    for ($r = 0; $r <= $range; $r++) {
        for ($g = 0; $g <= $range; $g++) {
            for ($b = 0; $b <= $range; $b++) {
                $result[] = array($r, $g, $b);
            }
        }
    }

    return $result;
}

print_r(color_array(5));