PHP中所有RGB排列的数组

PHP中所有RGB排列的数组,php,arrays,permutation,rgb,Php,Arrays,Permutation,Rgb,我正在尝试制作一个由RGB值组成的所有可能颜色的数组。在r=0b=0g=0到r=255b=255g=255之间的每个排列。我的函数的思想是,当调用它时,您提供一个限制数,以便该函数返回一个RGB值数组,直到这个数字,以阻止它返回所有1600万。我下面的代码返回767个排列(256*3),我如何让它返回我提供的限制数的全部1600万 function colourArray($number) { $r = 0; $g = 0; $b = 0; $i = 0;

我正在尝试制作一个由RGB值组成的所有可能颜色的数组。在r=0b=0g=0到r=255b=255g=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;

}
函数数组($number){
$r=0;
$g=0;
$b=0;
$i=0;

while($i嵌套循环是一个技巧。请尝试以下示例。我用PHP range函数将您的while循环替换为foreach循环,并将它们相互嵌套(即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;
}
参考资料


我几乎同意DICW,但我偏爱数值范围的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));

从外观上看,你需要嵌套while循环。但是拥有1600万个数组可能会导致过载、超时或其他问题。这只是一个练习吗?因为我相信有比计算这个更好的方法来解决你的问题。是的,这只是一个有趣的练习。拿一张纸,假装你是php解释器。现在运行您的代码。通过这种方式,您将找到在如此琐碎的任务中失败的确切原因。当强制转换为int并检查值是否高于或低于某个阈值时,为什么还要循环检查值会更有效率。简言之,您不需要循环所有可能的值来确定某个值是否在给定阈值内有效范围。为什么人们更喜欢使用
range()
foreach
而不是
for
呢?是的,我也想知道这一点。当foreach是一个对象数组或数组数组时,我更喜欢它。每当我在本质上是一组数字中循环时,我总是使用()。在我看来,这也可能是一个for循环。不过,在本例中,Foreach较短。Foreach创建了范围(0,$number)本身的副本。尽管事后看来,我本应该只声明一次范围()。他是一个伪装成蟒蛇的人:)这也很好。如果你问我,这是关于个人偏好的。