【问题标题】:How to create a variable in a foreach loop and use it outside the loop?如何在 foreach 循环中创建变量并在循环外使用它?
【发布时间】:2016-08-10 11:00:03
【问题描述】:

我将输入的 2 个数字与 xml 文件中的数字进行比较,然后将每次比较的结果存储在一个变量($n1、$n2)中。然后,我将每个变量的总数相加,并将其存储在 foreach 循环中的新变量 $total 中。我尝试在循环中显示结果,但它显示了正确和不正确比较的结果,因为它围绕整个 xml 循环。

我希望能够在循环之外使用 $total 来显示结果。当我在循环外回显 $total 时,无论比较是否正确,它的结果都是 0。当我在循环中回显它时,它有一个值。

如何确保 $total 变量将其存储的值保持在循环之外?

$num1 = $_POST['num1'];
$num2 = $_POST['num2'];

$xml = simplexml_load_file('lottery2.xml') or die("Error: Cannot create object");
if(isset($_POST['num1'])&& isset($_POST['num2']))
{
foreach($xml->children() as $record)
{ 
    if($record->num1 == $num1 || $record->num2 == $num1) 
     {
        $n1=1;
     } 
    else 
     {
        $n1=0;
     }
    if($record->num1 == $num2 || $record->num2 == $num2) 
     {
        $n2=1;
     } 
    else 
     {
        $n2=0;
     }

    $total= $n1+$n2;

}//end foreach

    if ($total=2) {
        echo "Jackpot is ".$record->jackpot ."<br />";
    } else {
        echo "No jackpot, sorry";
    }

【问题讨论】:

  • $total 需要在 foreach 循环之外定义,因为它代表您在每次迭代时都重写它。所以,在循环外定义$total 而不是$total= $n1+$n2;$total += $n1+$n2;

标签: php xml foreach


【解决方案1】:

如果您只关心是否找到了两个数字,请使用布尔值(不需要$total):

$n1 = false;//make true once we find 1st num
$n2 = false;//make true once we find 2nd num
foreach($xml->children() as $record){
    $n1 = $n1 || $record->num1 == $num1 || $record->num2 == $num1;
    $n2 = $n2 || $record->num1 == $num2 || $record->num2 == $num2;

    if($n1 && $n2) break; //we've found both. No need to keep looking
}//end foreach

if ($n1 && $n2) echo "Jackpot!";
else echo "No Jackpot, sorry";

【讨论】:

  • 并在foreach 循环之外定义$total。我的意思是它会默认为 null(抛开通知),强制可能会解决这个问题,但仍然如此。
  • 这有助于将 $total 的值相加,但现在每次找到输入的数字时,它都会将 $n1 和 $n2 设置为该数字出现在 xml 中的数量,而不是将其设置为 1我想。例如,如果我输入正确的数字 11 + 4,则 $total 变为 359 而不是 2。有没有办法将 $n1 + $n2 设置为 1,无论该数字在 xml 中找到多少次?
  • 我已经更新了我的表格,所以我现在有 6 个输入的数字,但只有 3 个需要正确才能显示头奖。有没有办法检查 3 个数字是否正确并在循环中收集与 3 个正确数字相关联的 $record->jackpot,然后显示累积奖金?这是因为根据输入的数字会有多个累积奖金
  • @A.Hollingsworth 您正在将问题扩展到原始范围之外。如果其中一个答案解决了原始问题,请选择并投票。要扩展,您只需要操作循环内的语句。您还可以在循环中的$jackpot var 中收集大奖,然后在外部回显该 var
【解决方案2】:

改变

if ($total=2)

if ($total == 2)

【讨论】:

    【解决方案3】:

    在循环外声明

     $num1 = $_POST['num1'];
    $num2 = $_POST['num2'];
    $total=0;
    

    并连接值。

     $total+=$num1+$num2;
    

    【讨论】:

      猜你喜欢
      • 2012-10-23
      • 2018-08-23
      • 2020-01-16
      • 1970-01-01
      • 1970-01-01
      • 2013-12-03
      • 2018-06-17
      • 2021-12-02
      • 1970-01-01
      相关资源
      最近更新 更多