PHP在数组上的计数太多,因为它';s基于0?

PHP在数组上的计数太多,因为它';s基于0?,php,arrays,count,alphabet,Php,Arrays,Count,Alphabet,我已经有过几次这样的问题了,当我在数组项上循环时 在本例中,我将生成字母表的所有2个字母组合 代码是有效的(我知道有一种更简单的方法可以使用2个for循环,但我正在尝试一些不同的方法) 但是,我必须执行count-1,因为count()返回数组长度的数字26,但是第26项显然不存在,因为它是基于0的 是否有一个版本的count()是以零为基础工作的 <?php $alphas = range('a', 'z'); $alphacount = count($alphas); // Why

我已经有过几次这样的问题了,当我在数组项上循环时

在本例中,我将生成字母表的所有2个字母组合

代码是有效的(我知道有一种更简单的方法可以使用2个for循环,但我正在尝试一些不同的方法)

但是,我必须执行
count
-1
,因为
count()
返回数组长度的数字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?

您有26个字符,但PHP中的数组是从0索引的。所以,索引是0,1。。。25.

count
是基于1的,由
range()
创建的数组是基于0的

这意味着:

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

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

<?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>";
}
或者忘记阵列!这更有趣:)


为什么要这么复杂?你可以这么做

foreach ($alphas as $alpha)
{
    foreach($alphas as $alpha2)
    {
      echo $alpha.$alpha2."<br>";
    }
}
foreach($alphas作为$alpha)
{
foreach($alphas作为$alpha2)
{
回声$alpha.$alpha2.“
”; } }

注意:在循环体内部操纵循环计数器变量通常不是一个好主意。您可以在特定条件下将
$i
设置为0。这可能会给您带来意想不到的结果,因此您必须绕过它。

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

也就是说,字母的下一个子范围以(字母)b而不是(字母)a开头。(参见您的输出:
az
后面的下一行是
bb
而不是
ba


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

对于空数组,count仅为0,数组中的1个元素给出count=1。。。。这完全合乎逻辑。。。。数组索引是基于0的,而不是count我知道这样做很简单,代码没有问题,这只是count()经常出现的问题,当在数组上循环时。好的,请你重新表述这个问题,或者提供另一个更简单的例子,这样我们就可以解决这个困惑了。这是一个很好的答案。也许是OP好奇的唯一正确答案。
对于($i='A';$i!='AAA';$i++){echo$i,PHP_EOL;}
@Mark Baker哇,如果这是一个答案,而且我可以,我会多次投赞成票。代码之美
    array_walk($alphas, function ($a) use ($alphas) {
        array_walk($alphas, function ($b) use ($a) {
            print "$a$b\n";
        });
    });
foreach ($alphas as $alpha)
{
    foreach($alphas as $alpha2)
    {
      echo $alpha.$alpha2."<br>";
    }
}