这似乎是编程逻辑的一般问题,因为这个问题似乎出现在我的代码中,无论它编码的语言是什么。
基本上我在for循环中有2个嵌套for循环。这些for循环的目的是枚举两组值之间的所有可能值。
代码的问题在于,第二组值包含0,值不会枚举。
比如说我们要枚举0,0,0和1,1,1之间的所有值,这样可以很好地处理每个嵌套循环。但是,我们尝试在0,0,0和0,1,0之间计算,循环不会继续到下一个循环,而是退出循环并继续执行其余代码。
for ($i1=$coords1[0]; $i1<=$coords2[0]; $i1++) { //if $coords2[0] = 0 loop will fail
for ($i2=$coords1[1]; $i2<=$coords2[1]; $i2++) { //if $coords2[1] = 0 loop will fail
for ($i3=$coords1[2]; $i3<=$coords2[2]; $i3++) {//if $coords2[2] = 0 loop will fail
$blocks.= $i1.",".$i2.",".$i3."|";
}
}
}
return $blocks;
完整代码:PHPFIDDLE
答案 0 :(得分:1)
好的,要从我们的聊天中复制一遍,我相信这就是解决方案:
<?php
$set1 = explode(",", '1,0,1');
$set2 = explode(",", '1,1,0');
$allbetween = _allbetween($set1, $set2);
echo 'All Between: '.$allbetween.'<br/>';
$allcount = count(explode("|", $allbetween))-1;
echo 'Number Of Blocks: '.$allcount;
function _allbetween($coords1, $coords2) {
$blocks = "";
for ($i=0; $i<=2; $i++) {
if ($coords1[$i] > $coords2[$i]) {
$tmp = $coords1[$i];
$coords1[$i] = $coords2[$i];
$coords2[$i] = $tmp;
}
}
for ($i1=$coords1[0]; $i1<=$coords2[0]; $i1++)
{
for ($i2=$coords1[1]; $i2<=$coords2[1]; $i2++)
{
for ($i3=$coords1[2]; $i3<=$coords2[2]; $i3++)
{
$blocks.= $i1.",".$i2.",".$i3."|";
}
}
}
return $blocks;
}
?>
这样做的原因是函数开头有一个交换循环,如果第一个值大于第二个值,它会交换三组值中的任何一个。这确保了可以计算它们之间的所有值。
修改:将演示链接修复为正确的网址
答案 1 :(得分:0)
答案 2 :(得分:0)
当您将每个初始值设置为结束范围值时,您的循环将永远不会循环。而是使用:
for ($i1=0; $i1<=$coords2[0]; $i1++)
...
etc
就跌倒而言,请尝试以下方法:
for ($i1=0; $i1<=$coords2[0] + 1; $i1++)
...
etc
答案 3 :(得分:0)
问题在于:倾销你的两个$ coords数组:
$ coords1:
array(3) {
[0]=>
string(1) "0"
[1]=>
string(1) "0"
[2]=>
string(1) "1"
}
$ coords2:
array(3) {
[0]=>
string(1) "1"
[1]=>
string(1) "0"
[2]=>
string(1) "1"
}
在你的第一次迭代中:
$coords1[0] => 1
$coords2[0] => 0
1 <= 0 -> FALSE
所以你的最外面的循环根本不会执行。
答案 4 :(得分:-2)