【问题标题】:Trying to use foreach loop inside while loop, keep getting infinite loop尝试在while循环中使用foreach循环,不断进入无限循环
【发布时间】:2014-11-13 13:53:24
【问题描述】:

我对 PHP 还是很陌生,所以我想知道是否可以得到一些帮助?我应该通过使用while循环和foreach循环遍历关联数组来创建图表。但我一直在无限循环,我不完全确定如何解决它。我也怀疑 if 语句条件没有帮助,但我也不知道。我错过了什么,有没有更好的方法来解决这个问题?

这是有问题的代码:

<?php
 include 'davesinventory.php';
 $delimiter = " \n";
 $inventory['name'] = rtrim(strtok($data, $delimiter));
 $inventory['year'] = rtrim(strtok($delimiter));
 $inventory['serial'] = rtrim(strtok($delimiter));
 $inventory['seats'] = rtrim(strtok($delimiter));
 $inventory['charge'] = rtrim(strtok($delimiter));
 $inventory['days'] = rtrim(strtok($delimiter));
 $inventory['rev'] = rtrim(strtok($delimiter));
 $inventory['orig'] = rtrim(strtok($delimiter));
 $inventory['miles'] = rtrim(strtok($delimiter));
 $inventory['deprec'] = rtrim(strtok($delimiter));
 $inventory['freq'] = rtrim(strtok($delimiter));

 printf("<b> VEHICLE\tYEAR\t SERIAL#\t RENT COST\t DAYS OUT\t REVENUE\t ORIG. PRICE\t MILEAGE\t NOTES\n</b>");
?>
<hr>
<?php
 while($inventory['name']){
   foreach($inventory as $key => $vehicles){
         if ($key !== ['seats'] || ['deprec'] || ['freq'])
          {
             print $vehicles;
          }
          else if($key == ['seats'] || ['deprec'] || ['freq'])
          {
            echo " ";
          }
   }
}
?>
<pre>

这是“包含”要求的文件:

<?php
$data =
"DodgeAvenger 2006 DA111-9 4 35.50 105 3727.50 21297.00 8795 .20 Monthly
Olds_Alero 2004 OA340-1 5 29.95 126 3773.70 23335.00 36010 .20 Monthly
Chry_PT_Crsr 2003 CPTC-MW2 4 37.95 26 986.70 15405.00 29020 .20 Weekly
Cadillac_Limo 1999 1999-01 18 142.50 4 570.00 38900.00 187419 .10 Weekly
Chev_M_Carlo 1997 CMC-21 6 27.30 55 1501.50 19437.50 113689 .20 Monthly
Chev_Suburban 1997 CSB-011 8 42.75 17 726.75 29999.00 137560 .20 Monthly
VW_Bus_T2A 1977 VWB-09 32 15.00 16 240.00 12000.00 397800 NA Daily
Ford_Stn_Wgn 1976 FSW-67 8 10.95 6 65.70 9899.00 149379 NA Whenever
Toy_Forklift 1997 6FGCU-45 1 61.25 65 3981.25 8795 732 .10 Yearly
Cat_Dozer(D7H) 1989 1989-11 1 98.00 5 490.00 67850.00 1304 .10 Yearly
";
?>

【问题讨论】:

  • while循环的目的是什么?
  • if ($key !== ['seats'] || ['deprec'] || ['freq']) 应该是 if ($key !== ['seats'] || $key !== ['deprec'] || $key !== ['freq']) 或类似的东西,这取决于你真正想要什么
  • 你的循环将永远存在。运行它会发现条件是真实的。 while($condtion) 运行代码。意味着如果条件始终为假,则运行此操作直到条件为真。比它永远运行。
  • while 循环是必需的,所以我必须想办法同时利用它和 foreach 循环。

标签: php arrays loops foreach while-loop


【解决方案1】:

这里不需要使用while 循环。 Foreach就够了

<?php    
    if(isset($inventory['name'])){
        foreach($inventory as $key => $vehicles){
            if ($key !== 'seats' || $key !=='deprec' || $key !=='freq')
            {
               print $vehicles;
            }
            else{
               echo " ";
            }
        }
    }
?>

【讨论】:

  • 感谢您抽出宝贵时间回答这个问题!
  • 它给了我数组的第一个结果,但我需要它的其余部分才能真正工作。我认为这是while循环的来源,但我不确定如何在没有无限循环的情况下进行。如果我添加了 include 命令需要的外部 php 文件,会有帮助吗?
  • 那么请提供完整的数组结构。我想我可以帮助你:)
  • 这里无限循环的原因是while。因为 while 仅当内部使用的条件错误/错误时才中断循环。在这里,您正在检查 $inventory['name'] 是否已设置。它总是设置,因为它有一个值。因此,如果您有 $inventory 的父数组,请在当前 foreach 循环之外使用另一个 foreach。
【解决方案2】:

Blank's answer 应该适合你。我的实际上应该是评论,但在答案中格式化代码要容易得多。

如果使用while 只是家庭作业或测试的烦人要求(根据您的评论...),您可以简单地解决它:

$finished = false;

while (!$finished) 
{
    //do all the work here - foreach loop and so on

    $finished = true;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多