0

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

为此,我编写了一个循环:

$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;
}

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

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

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

非常感谢您的想法。

4

2 回答 2

3

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

有两种方法可以做到这一点。通过引用传递:

foreach($indicators as &$indicator)

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

foreach($indicators as $idx => $indicator)
{   
    if($indicator==0)
    {
        $indicators[$idx]='Unavailable';
    }       
}
于 2013-03-22T04:09:44.093 回答
0

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

试试这个

foreach($indicators as $key=>$indicator)
{   
 if($indicator==0)
   {
  $indicator[$key]='Unavailable';
  }       
}
于 2013-03-22T04:21:38.673 回答