PHP数量1太多,因为它基于0?

时间:2014-06-01 11:48:10

标签: php arrays count alphabet

当循环遍历数组项时,我已经有过几次这个问题了。

在这个例子中,我正在生成字母表的所有2个字母组合。

代码有效(我知道有一个更容易的方法,用2 for循环来做,但我正在尝试不同的东西)。

但是我必须count -1count()返回数组长度的数字26,但第26项显然不存在,因为它基于0?

是否有count()的版本无法在零基础上运行?

<?php
$alphas = range('a', 'z');

$alphacount = count($alphas);

// Why do I have to do this bit here?
$alphaminus = $alphacount -1;

$a = 0;
for ($i=0;$i<$alphacount;$i++)  {
    $first = $alphas[$a];
    $second = $alphas[$i];
    if ($i === $alphaminus && $a < $alphaminus  ) {
        $i = 0;
        $a ++;
    }
    echo "$first$second<br>";
}
?>

没有$alphaminus = $alphacount -1;我得到未定义的偏移量26?

5 个答案:

答案 0 :(得分:2)

怎么样:

<?php
$alphas = range('a', 'z');

$alphacount = count($alphas);

$a = 0;
for ($i=0;$i<$alphacount;$i++)  {
    $first = $alphas[$a];
    $second = $alphas[$i];
    if ($i >= $alphacount && $a < $alphaminus  ) {
        $i = 0;
        $a ++;
    }
    echo "$first$second<br>";
}

所以你不必-1,因为你不喜欢它! :)

怎么样:

$alphas = range('a', 'z');
for ($i = 0; $i < count($alphas); $i++) {
    for ($a = 0; $a < count($alphas); $a++) {
        echo "{$alphas[$i]}{$alphas[$a]}\n";
    }
}

或忘记数组!这更有趣:)

    array_walk($alphas, function ($a) use ($alphas) {
        array_walk($alphas, function ($b) use ($a) {
            print "$a$b\n";
        });
    });

答案 1 :(得分:2)

问题是你在循环中将$ i重置为0;然后在遇到循环结束时,$ i递增,因此循环中的下一次运行将使用$ i = 1而不是$ i = 0.

也就是说,字母的下一个子范围以(字母)b而不是(字母)a开头。 (请参阅您的输出:azbb而不是ba的下一行。)

解决方案:在循环中将$ i重置为-1,然后在结束时它将再次以值0运行。

答案 2 :(得分:1)

你有26个字符,但PHP中的数组是从0索引的。因此,索引是0,1,... 25。

答案 3 :(得分:1)

count从1开始,由range()创建的数组从0开始。

这意味着:

$alphas[0] == a
$alphas[25] == z

$count($alphas) = 26; // there are 26 elements. First element is $alphas[0]

答案 4 :(得分:1)

为什么它必须如此复杂?你可以简单地做

foreach ($alphas as $alpha)
{
    foreach($alphas as $alpha2)
    {
      echo $alpha.$alpha2."<br>";
    }
}

注意:在该循环体内操作循环计数器变量通常不是一个好主意。在某种情况下,您将$i设置为0。这可能会给你意想不到的结果,因此你必须在它周围导航。