【问题标题】:bad array value in loop循环中的错误数组值
【发布时间】:2011-10-27 23:49:22
【问题描述】:

我正在尝试这个循环,但$m[2][3] 有问题。没有显示任何值。所以我对增量有一些问题。

$nArr = array('A', 'B', 'C', 'D', 'E', 'F');

$lp = 4;

for ($i = 0; $i < $lp; $i++) {
    $m[$i][$i] = 1;
    for ($x = $i; $x < $lp; $x++) {
        $v = $i+$i;
        $m[$i][$x+1] = $nArr[$x+$v];
    }
}

这是我的输出:

1 + A + B + C + - 1 + D + E + - 1 +   + - 1 +

我想要的输出:

1 + A + B + C + - 1 + D + E + - 1 + F + - 1 +

详细说明:

echo $m[0][0]."+"; 1
echo $m[0][1]."+"; A
echo $m[0][2]."+"; B
echo $m[0][3]."+"; C
echo " - ";
echo $m[1][1]."+"; 1
echo $m[1][2]."+"; D
echo $m[1][3]."+"; E
echo "- ";
echo $m[2][2]."+";1
echo $m[2][3]."+"; //error, must be F
echo "- ";
echo $m[3][3]."+"; 1

【问题讨论】:

    标签: php arrays loops


    【解决方案1】:

    你的问题在于你的进步。在第二个“for”中,您的进度迅速增加:

    $v = $i+$i;         
    $m[$i][$x+1] = $nArr[$x+$v]; 
    
    • 在第一次迭代中以 0 + 0 + 0 ($ x + $ i + $ i) = 0 = “一个”
    • 在第二次迭代中以 1 + 1 + 1 ($ x + $ i + $ i) = 3 = “D”
    • 第三次迭代从 2 + 2 + 2 ($ x + $ i + $ i) = 6 = null,你的数组有 6 个元素,所以你的最大索引是 5。

    您应该更改级数以获得下一个索引级数:0、3、5。

    试试这个:

    $nArr = array('A', 'B', 'C', 'D', 'E', 'F');
    $lp = 4;                
    for ($i = 0; $i < $lp; $i++) {
         $m[$i][$i] = 1;            
        for ($x = $i; $x < $lp; $x++) {                
            $v = $i+ceil($i/2);
            $m[$i][$x+1] = $nArr[$x+$v];            
        }        
    }
    

    【讨论】:

    • 1+B+C+D+ - 1+D+E+- 1+F+- 1+
    【解决方案2】:

    大声笑,不得不接受挑战......

    $nArr = array('A', 'B', 'C', 'D', 'E', 'F');
    
    $counter = 3;
    
    while ($counter > 0) {    
    
        $chunkedValues[$counter][0] = 1;
    
        for ($j = 0 ; $j < $counter ; $j++) {
            $chunkedValues[$counter][$j + 1] = $nArr[$j];
        }
    
        $nArr = array_slice($nArr, $counter--);
    }
    
    var_dump($chunkedValues);
    

    【讨论】:

      【解决方案3】:

      $lp 是 4,我敢打赌应该是 5。或者甚至更好地将其设置为 count($nArr) - 1

      PS。这个循环到底是干什么用的?

      编辑:没关系,这并没有解决它。

      【讨论】:

        【解决方案4】:

        问题是你的算法是错误的。您的代码设置 m[i][j] =

        • 如果 j 则未定义
        • 1 如果 j = i
        • nArr[2 * i + j - 1] 如果 j > i

        所以m[2][3] = nArr[6],这是未定义的。

        我并不完全清楚你想要做什么,或者为什么,但我最好的猜测是:

        $nArr = array('A', 'B', 'C', 'D', 'E', 'F');
        
        $lp = 4;
        
        $nArr_index = 0;
        for ($i = 0; $i < $lp; $i++) {
            $m[$i][$i] = 1;
            for ($j = $i + 1; $j <= $lp; $j++) {
                $m[$i][$j] = $nArr[$nArr_index++];
            }
        }
        

        【讨论】:

        • 1+A+B+C+ - 1+E+F+- 1++- 1+
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-14
        • 1970-01-01
        • 1970-01-01
        • 2016-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多