循环中的错误数组值

时间:2011-10-27 23:49:23

标签: php arrays loops

我正在尝试此循环,但我在$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

4 个答案:

答案 0 :(得分:2)

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

$v = $i+$i;         
$m[$i][$x+1] = $nArr[$x+$v]; 
  • 在第一次迭代中,从0 + 0 + 0($ x + $ i + $ i)= 0 =开始 “A”
  • 在第二次迭代中以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 :(得分:1)

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

$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);

答案 2 :(得分:0)

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

PS。世界上这个循环是什么?

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

答案 3 :(得分:0)

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

  • 如果j&lt;我
  • 1如果j = i
  • nArr [2 * i + j - 1]如果j>我

所以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++];
    }
}