Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环内定义的变量不在循环外定义(PHP)_Php_Loops_Scope - Fatal编程技术网

循环内定义的变量不在循环外定义(PHP)

循环内定义的变量不在循环外定义(PHP),php,loops,scope,Php,Loops,Scope,我有一系列变量,我想检查它们是否为0,如果是,我想重新定义变量以等于字符串“Unavailable” 为此,我编写了一个循环: $indicators=array($admitted, $targeted, $cured, $defaulted, $total); foreach($indicators as $indicator) { if($indicator==0) { $indicator='Unavailable'; } } 这将检查数组

我有一系列变量,我想检查它们是否为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>
            ';
$table1.='
“.$年。”
“.$targeted。”
“我承认。”
“.$total。”
“.$治愈。”
“.$违约。”
';
其输出包括一些“0”术语-它们永远不会被字符串“Unavailable”替换。

我用以下代码调试了代码:

foreach($indicators as $indicator)
{
echo 'Before: '.$indicator;
if($indicator==0)
    {
    $indicator='Unavailable';
    }
    echo '<br />';
echo 'After :'.$indicator;
}
foreach($indicators作为$indicator)
{
回声“之前:”.$指示器;
如果($indicator==0)
{
$indicator='Unavailable';
}
回声“
”; 回声“后:”.$indicator; }
并确认它正在重新定义变量,但重新定义并没有应用于循环之外

我觉得这是一个涉及范围的问题——我承认我没有很好地理解

我的问题是:如何让在循环中定义的变量应用于该循环之外?


非常感谢您的想法。

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

有两种方法可以做到这一点。要么:

或者手动将更改推回阵列:

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

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

有两种方法可以做到这一点。要么:

或者手动将更改推回阵列:

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

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

试试这个

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

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

试试这个

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

谢谢,以前不知道通过参考传递!谢谢,以前不知道通过参考传递!