0

一連の変数があり、それらが 0 かどうかを確認したいのですが、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」用語が含まれています。それらは文字列「Unavailable」に置き換えられることはありません。

次のコードをデバッグしました。

foreach($indicators as $indicator)
{
echo 'Before: '.$indicator;
if($indicator==0)
    {
    $indicator='Unavailable';
    }
    echo '<br />';
echo 'After :'.$indicator;
}

そして、変数を再定義していることを確認しましたが、その再定義はループの外では適用されていませんでした。

これは範囲の問題だと思いますが、よく理解していないことを告白します。

私の質問は、ループ内で定義された変数を取得して、そのループ外に適用するにはどうすればよいですか?

ご感想ありがとうございます。

4

2 に答える 2

3

$indicatorこれは、配列の元の要素ではなく、変数を更新するだけであるためです。

これを行うには2つの方法があります。参照で渡す:

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 に答える