Php 如果当前循环为0,则继续下一个for循环
这似乎是编程逻辑的一个一般性问题,因为这个问题似乎出现在我的代码中,而不管它是用什么语言编写的 基本上我有两个嵌套的for循环,在for循环中。这些for循环的目的是枚举两组值之间的所有可能值 代码的问题是,第二组值包含0,这些值不会枚举 例如,我们要枚举0,0,0和1,1,1之间的所有值,这非常好,因为每个嵌套循环都经过处理。但是,如果我们尝试计算0,0,0和0,1,0之间的值,循环将不会继续到下一个循环,而是退出循环并继续到代码的其余部分Php 如果当前循环为0,则继续下一个for循环,php,loops,for-loop,zero,Php,Loops,For Loop,Zero,这似乎是编程逻辑的一个一般性问题,因为这个问题似乎出现在我的代码中,而不管它是用什么语言编写的 基本上我有两个嵌套的for循环,在for循环中。这些for循环的目的是枚举两组值之间的所有可能值 代码的问题是,第二组值包含0,这些值不会枚举 例如,我们要枚举0,0,0和1,1,1之间的所有值,这非常好,因为每个嵌套循环都经过处理。但是,如果我们尝试计算0,0,0和0,1,0之间的值,循环将不会继续到下一个循环,而是退出循环并继续到代码的其余部分 for ($i1=$coords1[0]; $i1&
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;
for($i1=$coords1[0];$i1break;可以。请参阅链接中的更多信息:
中断;就可以了。请参阅链接中的更多信息:
我想你正在寻找
而对于
我想你正在寻找
而对于
当您将每个初始值设置为结束范围值时,您的循环将永远不会循环。请改用:
for ($i1=0; $i1<=$coords2[0]; $i1++)
...
etc
对于($i1=0;$i1当您将每个初始值设置为结束范围值时,您的循环将永远不会循环。请改用:
for ($i1=0; $i1<=$coords2[0]; $i1++)
...
etc
for($i1=0;$i1问题是:转储两个$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
$coords1[0]=>1
$coords2[0]=>0
1错误
因此,您的最外层循环根本不会执行。问题在于:转储两个$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
$coords1[0]=>1
$coords2[0]=>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;
}
?>
这样做的原因是,在函数的开头有一个交换循环,如果第一组值大于第二组值,则交换三组值中的任何一组。这确保可以计算“它们之间”的所有值
编辑:将演示链接修复到正确的URL好的,要从我们的聊天中复制此链接,我相信这是解决方案:
<?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;
}
?>
这样做的原因是,在函数的开头有一个交换循环,如果第一组值大于第二组值,则交换三组值中的任何一组。这确保可以计算“它们之间”的所有值
编辑:将演示链接固定到正确的URL使用GOTO跳入和跳出循环是一个糟糕的想法。使用GOTO跳入和跳出循环是一个糟糕的想法。嗯……您可能会认为,在您的示例中,嵌套循环应该至少执行一次,因为您使用的是我使用Javascript重新创建了您的代码,而且它似乎是rk好的。看看这里:。使用000111生成了8个响应,正如预期的那样。使用000010生成了2个响应,也正如预期的那样,这看起来对您合适吗?(确保在运行代码时打开JS控制台)这是我的服务器上托管的脚本的完整示例。您可以在中看到(比较1,0,1和1,1,1)按照预期进行计算,但在(比较1,0,1和1,1,0)没有返回任何结果。是的,它在javascript和其他一些语言中似乎功能完美,但在php中没有。编辑:编辑:不,它仍然坏了。这似乎不正确。当我单击你的链接1时,我看到显示了12个结果,结果中有很多2。这不应该是,因为你的范围是从0到1。在我的测试中,我没有我看到了该组合的两个结果。对于LINK2,没有结果,这实际上是正确的。这两组数字没有有效的组合。嗯……您可能会认为在您的示例中,嵌套循环应该至少执行一次,因为您使用的是我使用Javascript重新创建了代码,它似乎工作正常是的。看看这里:。使用000111生成了8个响应,正如预期的那样。使用000010生成了2个响应,也正如预期的那样,这对您来说合适吗?(确保在运行代码时打开JS控制台)这是我的服务器上托管的脚本的完整示例。您可以在中看到(比较1,0,1和1,1,1)按照预期进行计算,但在(比较1,0,1和1,1,0)没有返回任何结果。是的,它在javascript和其他一些语言中似乎功能完美,但在php中没有。编辑:编辑:不,它仍然坏了。这似乎不正确。当我单击你的链接1时,我看到显示了12个结果,结果中有很多2。这不应该是,因为你的范围是从0到1。在我的测试中,我没有我看到该组合的两个结果。对于LINK2,没有结果,这实际上是正确的。这两组数字没有有效的组合。事实并非如此……我的脚本是从一个值到另一个值(计算中间的所有值)此设置将初始计数设置为0,并将+1添加到最终计数值,会导致计数结果不准确。有关详细信息,请参阅和examples@joshd:循环正在从coords 1初始化,然后针对coords 2进行测试。即使它们在同一阵列上初始化/测试,循环也应至少运行一次,因为比较是Y你是对的。很抱歉造成混淆!在这种情况下,你是否考虑过使用while而不是for循环?事实并非如此……我的脚本是从一个值到另一个值(计算中间的所有值)此设置将初始计数设置为0,并将+1添加到最终计数值,会导致计数结果不准确。有关详细信息,请参阅和examples@joshd:循环从coords 1初始化,然后针对coords 2进行测试。即使它们在同一阵列上初始化/测试,循环也应至少运行一次,因为