一个简单的循环迭代难度

时间:2015-11-17 13:04:51

标签: php

我正在使用Imagemagick的PHP扩展来处理一些图像。在我的代码中,我试图将变量$ j的值增加1;请注意$ j在第二次循环迭代中发挥作用。我无法弄清楚在哪里放置$ j ++;在我的代码中;它似乎没有增加,因为我把它放在最后,默认为它的初始'0'零值。

first iteration we do not need $j;
second iteration $j is assigned 0;
third iteration $j needs to be increased by 1 or $j = 1
... loop continues  



$dst = "tem891";

$over = new Imagick();
$over->readImage(DOCROOT . '/' . $dst . '/middle.png');

$images = glob(DOCROOT . '/' . $dst . "/line-*.png");
sort($images, SORT_NATURAL | SORT_FLAG_CASE);

$count  = count($images);
$height = (720 - $over->getImageHeight()) / 2;
$width  = (640 - $over->getImageWidth()) / 2;


$j = '';
for ($i = 0; $i < $count; $i++) {

    if ($i == 0) {
        $base = new Imagick();
        $base->newImage(640, 720, new ImagickPixel('transparent'));
    } else {
        $j    = 0;
        $base = new Imagick();
        $base->readImage(DOCROOT . '/composite-' . $j . '.png');
    }

    $top = new Imagick();
    $top->readImage($images[$i]);
    $base->compositeImage($top, Imagick::COMPOSITE_DEFAULT, $width, $height);
    $base->writeImage(DOCROOT . '/composite-' . $i . '.png');
    $height += $top->getImageHeight();


}

2 个答案:

答案 0 :(得分:1)

在您的代码中,从第二次迭代开始,对于所有后续迭代,行$j = 0;运行,因此$ j将保持为0.

我建议你在循环之前或if($i==0){}子句中初始化$ j = 0,并在else {}子句的末尾递增它:

[...]
$width  = (640 - $over->getImageWidth()) / 2;


$j = 0;
for ($i = 0; $i < $count; $i++) {

    if ($i == 0) {
        $base = new Imagick();
        $base->newImage(640, 720, new ImagickPixel('transparent'));
    } else {
        $base = new Imagick();
        $base->readImage(DOCROOT . '/composite-' . $j . '.png');
        $j++;
    }

    $top = new Imagick();
    $top->readImage($images[$i]);
    $base->compositeImage($top, Imagick::COMPOSITE_DEFAULT, $width, $height);
    $base->writeImage(DOCROOT . '/composite-' . $i . '.png');
    $height += $top->getImageHeight();


}

答案 1 :(得分:0)

通过将变量j设置为0来初始化变量j。

$j = 0
for ($i = 0; $i < $count; $i++) {

    if (==> put your condition here) {
        $j++;
    } 
....
}

在for循环中,您可以制定想要j增加的条件(例如,在每第二次迭代中,而不是在第一次迭代期间,仅用于前10次迭代,......)