循环中定义的变量不在循环外定义(PHP)

时间:2013-03-22 04:02:04

标签: php loops scope

我有一系列变量,我想检查它们是否为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;
}

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

我觉得这是范围问题 - 我承认不能很好地理解。

我的问题是:如何在循环内定义变量以在该循环之外应用?

非常感谢你的想法。

2 个答案:

答案 0 :(得分:3)

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

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

foreach($indicators as &$indicator)

或手动将更改推回到阵列:

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

答案 1 :(得分:0)

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

试试这个

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