2013-03-22 50 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'; 
    }  
}