2013-03-22 69 views
0

我有一系列的变量,我要检查,如果它们是0或不是,并且如果它们是,我要重新定义变量等于该字符串“不可用”。变量不环路之外定义(PHP)

为此我写了一个循环:

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

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

这种检查是否每个数组$指标的变量等于零,如果是重新定义它。

然而,该环路被闭合后的表是使用变量建:

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

,并确认其被重新定义变量,但redefiniton没有应用循环外。

我觉得这是一个范围的问题 - 我承认不理解。

我的问题是:我怎样才能得到一个循环中定义的以应用循环外的变量?

非常感谢您的想法。

回答

3

那是因为你正在做的是更新变量$indicator,而不是数组的原创要素。

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

foreach($indicators as &$indicator) 

或手动推改回阵:

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

谢谢,之前不知道通过参考! – Gideon 2013-03-22 04:31:56

0

你是不是分配更改值回阵列

试试这个

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