我有一系列变量,我想检查它们是否为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;
}
并确认它正在重新定义变量,但重新定义不适用于循环之外。
我觉得这是范围问题 - 我承认不能很好地理解。
我的问题是:如何在循环内定义变量以在该循环之外应用?
非常感谢你的想法。
答案 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';
}
}