我正在尝试此循环,但我在$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
答案 0 :(得分:2)
你的问题在于你的进步。在第二个“for”中,您的进展迅速增加:
$v = $i+$i;
$m[$i][$x+1] = $nArr[$x+$v];
您应该更改进度以获得下一个索引进度: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] =
所以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++];
}
}