在For循环中获得意外结果

时间:2017-07-14 09:36:00

标签: php for-loop

我有这个功能......

public function getGroupName($no_of_participant) {
        $groupNameArry = array();
        $groupNumber = 0;

        for($i = 0; $i <= $no_of_participant/2; $i++) { // loop for rows
            for($letter = 'A'; $letter <= 'Z'; $letter++) {  // loop for columns
                if($groupNumber <= $no_of_participant/2) {
                    if($i == 0) {
                        $groupNameArry[$groupNumber] = $letter;
                    } else {
                        $groupNameArry[$groupNumber] = $letter.$i;
                    }

                    $groupNumber++;
                }
            }
        }

        return $groupNameArry;
    }

预期结果为

A-Z and then A1,B1,C1,D1 .... 

但意外得到

A-Z and then AA, AB, AC ... 

我将此功能称为

$groupNameArry = $this->getGroupName(MAX_ALLOWED_PARTICIPANT);

最大允许参与者值为100.出错了什么?请帮忙!

2 个答案:

答案 0 :(得分:1)

在每个循环中代码var Example = function() { }; Example.prototype.x = 5; var instance1 = new Example(); console.log(instance1.x, instance1.y); // 5, undefined Example.prototype.y = 6; console.log(instance1.x, instance1.y); // 5, 6 !!

这可以解决您的问题。

Case when Isdate(@Datevar)=1 then convert(date, @datrevar) else '' end  

答案 1 :(得分:1)

$letter是一个字符串。

$letter变为'Z'时,条件$letter <= 'Z'TRUE,它会运行您期望的最后一次迭代。

此迭代后$letter++递增'Z',它变为'AA'。这就是PHP处理字符串++的方式。

'Z'转换为'AA'的增量运算符甚至在increment operators的文档中作为示例给出(参见示例#1)。

然后条件$letter <= 'Z'仍为TRUE,并且$letter运行更多迭代,其值为'AA''AB''AC' aso

'A''Z'进行迭代的

PHP方式是在foreach上使用range()

foreach (range('A', 'Z') as $letter) {
    echo($letter);
}
echo("\nDone.");

output是:

ABCDEFGHIJKLMNOPQRSTUVWXYZ
Done.