如何嵌套这个for循环?

时间:2015-10-05 10:57:43

标签: php for-loop

我正在尝试创建一个带有重复圆圈图案的图像。我在PHP中用GD做这个。到目前为止,我已经能够以水平方式(x轴)平铺圆形但是无法在垂直方向(y轴)平铺圆形。这是一个示例图像。

enter image description here

以下是创建上述图片的代码:

$width = 1000; 
$height = 500;

$image_p = imagecreatetruecolor($width, $height); 
$color = imagecolorallocate($image_p, 0, 255, 0); 

    for ($i = 0; $i <= 10; $i++){
        if ($i % 2 !== 0){ //only if odd numbers
        imagefilledellipse ($image_p, 50 * $i, 50, 100, 100, $color);
        }   

    }

imagejpeg($image_p, uniqid() .'.jpg');

我的猜测是,为了以垂直方式平铺每个圆圈,它只需要另一个嵌套for loop,它将类似于已存在的那个,除了y轴的变化,如下所示:

imagefilledellipse ($image_p, 50, 50 * $i, 100, 100, $color);

我尝试了很多嵌套变体但无法使其工作。请帮忙。

2 个答案:

答案 0 :(得分:1)

函数imagefilledellipse具有以下签名(我想):

imagefilledellipse(image, x, y, width, height, color)

这意味着您正在为i0 < i < 10的每个x一个具有不同y位置的圆圈绘图。

将其与$width = 1000; $height = 500; $image_p = imagecreatetruecolor($width, $height); $color = imagecolorallocate($image_p, 0, 255, 0); for ($i = 0; $i <= 10; $i++){ if ($i % 2 !== 0){ //only if odd numbers imagefilledellipse ($image_p, 50, 50 * $i, 100, 100, $color); } } imagejpeg($image_p, uniqid() .'.jpg'); 参数交换以绘制垂直圆圈:

$width = 1000; 
$height = 500;

$image_p = imagecreatetruecolor($width, $height); 
$color = imagecolorallocate($image_p, 0, 255, 0); 

    for ($i = 0; $i <= 10; $i++){
        for ($j = 0; $j <= 10; $j++) {
            if ($i % 2 !== 0 && $j % 2 !== 0) { //only if odd numbers
                imagefilledellipse ($image_p, 50 * $i, 50 * $j, 100, 100, $color);
            }   
        }
    }

imagejpeg($image_p, uniqid() .'.jpg');

为了绘制水平和垂直圆圈,正如你所说,你确实需要一个嵌套的for循环:

i * 50

此外,如果您要将比例从50 + i * 100更改为imagefilledellipse ($image_p, 50 + 100 * $i, 50 + 100 * $j, 100, 100, $color); ,则无需检查奇数,如下所示:

 Label1.Text = Date.Today.ToString("dddd")

答案 1 :(得分:1)

如果你知道你想要多少列,那应该很容易。

$colCounter=0;
$yAxis = 50;
for ($i = 0; $i <= 10; $i++){
    if ($i % 2 !== 0){ //only if odd numbers
        if ($colCounter % 5 === 0){ // Do something every 5 cols
            $yAxis = $yAxis + 50 // add 50 onto each row
        }
        $colCounter++;//increment counter
        imagefilledellipse ($image_p, 50 * $i, $yAxis, 100, 100, $color);
    }   
}

请注意,这是未经测试的代码