【问题标题】:Variables defined within a loop are not defined outside the loop (PHP)循环内定义的变量未在循环外定义(PHP)
【发布时间】:2013-03-22 04:02:03
【问题描述】:

我有一系列变量,我想检查它们是否为 0,如果是,我希望重新定义变量以等于字符串 'Unavailable'。

为此我写了一个循环:

$indicators=array($admitted, $targeted, $cured, $defaulted, $total);

foreach($indicators as $indicator)
{   
if($indicator==0)
    {
    $indicator='Unavailable';
    }       
}

这会检查数组 $indicators 中的每个变量是否等于零,如果是则重新定义它。

然而,在这个循环结束后,一个表是使用变量构建的:

$table1 .= '
            <tr>
                    <td>'.$year.'</td>
                    <td>'.$targeted.'</td>
                    <td>'.$admitted.'</td>
                    <td>'.$total.'</td>
                    <td>'.$cured.'</td>
                    <td>'.$defaulted.'</td>                 
            </tr>
            ';

其中的输出包含一些“0”项 - 它们永远不会替换字符串“不可用”。

我用以下代码调试了代码:

foreach($indicators as $indicator)
{
echo 'Before: '.$indicator;
if($indicator==0)
    {
    $indicator='Unavailable';
    }
    echo '<br />';
echo 'After :'.$indicator;
}

并确认它正在重新定义变量,但重新定义并未在循环之外应用。

我觉得这是范围的问题 - 我承认我没有很好地理解。

我的问题是:如何将循环内定义的变量应用到循环外?

非常感谢您的想法。

【问题讨论】:

    标签: php loops scope


    【解决方案1】:

    这是因为您所做的只是更新变量$indicator,而不是数组的原始元素。

    有两种方法可以做到这一点。要么pass by reference:

    foreach($indicators as &$indicator)
    

    或手动将更改推送回数组:

    foreach($indicators as $idx => $indicator)
    {   
        if($indicator==0)
        {
            $indicators[$idx]='Unavailable';
        }       
    }
    

    【讨论】:

    • 谢谢,之前不知道通过引用传递!
    【解决方案2】:

    您没有将更改后的值分配回数组

    试试这个

    foreach($indicators as $key=>$indicator)
    {   
     if($indicator==0)
       {
      $indicator[$key]='Unavailable';
      }       
    }
    

    【讨论】:

      猜你喜欢
      • 2018-05-17
      • 1970-01-01
      • 2023-03-02
      • 2012-12-02
      • 1970-01-01
      • 2018-08-23
      • 1970-01-01
      • 2015-10-09
      • 1970-01-01
      相关资源
      最近更新 更多