Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果当前循环为0,则继续下一个for循环_Php_Loops_For Loop_Zero - Fatal编程技术网

Php 如果当前循环为0,则继续下一个for循环

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循环,在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;

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进行测试。即使它们在同一阵列上初始化/测试,循环也应至少运行一次,因为