PHP将分配的变量设置为未定义-是否保持不变?

PHP将分配的变量设置为未定义-是否保持不变?,php,undefined,undefined-behavior,Php,Undefined,Undefined Behavior,我对我刚刚调试的一些行为有疑问,特别是当一个已经设置的变量被分配到一个未定义的值时会发生什么。我只是想检查一下我是否正确理解发生的事情。如果一个变量已经设置了一个值,并且您试图将它设置为未定义的值,那么它会保持原来的值吗 具体地说,我有一些PHP代码,看起来像这样——假设$string是由1和2组成的字符串 $array = array(1 => 'foo', 2 => 'bar'); for($count=0;$count<len($string);$count++) {

我对我刚刚调试的一些行为有疑问,特别是当一个已经设置的变量被分配到一个未定义的值时会发生什么。我只是想检查一下我是否正确理解发生的事情。如果一个变量已经设置了一个值,并且您试图将它设置为未定义的值,那么它会保持原来的值吗

具体地说,我有一些PHP代码,看起来像这样——假设$string是由1和2组成的字符串

$array = array(1 => 'foo', 2 => 'bar');
for($count=0;$count<len($string);$count++)
{
    $newvar = $array[$string[$count]];
    if(!empty($newvar))
    {
       switch($newvar)
       {
             case 'foo':
                    // blah blah break;
             case 'bar':
                    // blah blah break;
       }
    }
}
$array=array(1=>'foo',2=>'bar');

对于($count=0;$count,恐怕您的代码示例中变量$array的定义不正确,它应该如下所示:

$array=array(1=>'foo',2=>'bar')


如果将$newvar设置为$array的未定义元素(例如3),则$newvar将设置为NULL。

使用
array\u key\u exists($array,$string[$count])
检查数组中是否有键的值。

好的,我已经找出了导致我看到的行为的原因。字符串“”和“”在empty()下的行为不同。其中一个被认为是空的,另一个不是空的,这让我很困惑。非常感谢您的帮助。

谢谢-刚刚在原始问题中更正了这一点。因此,如果$newvar为NULL,那么我的if(!empty($newvar))语句应该让我跳出开关?它似乎不是……是的,当$newvar为NULL时,则为空($newvar)应计算为true,但以下解决方案更为简洁:if(empty($newvar)){break;}奇怪的是,因为我收到的错误告诉我开关确实发生了…我应该发布我的实际代码吗?谢谢-这是另一个很好的解决方案。但我更感兴趣的是我的错误原因。我只是想了解我得到的任何意外行为。你应该在注释中写下这些,因为这不是你的答案可以使用trim($upstr)从字符串的开头和结尾删除不必要的空格。使用数字数组而不是字符串对其进行迭代也是一个不错的ide。另一个方法是这样做:$up_arr=str_split(trim($upstr))因为这将把修剪过的字符串的字符分割成一个数组。是的,谢谢。修剪是我正在使用的解决方案。我真的只是问,因为我不知道出了什么问题。所以,事实上,这是我问题的答案,这是“为什么额外的空格会把代码搞糟?”,而不是“我如何去掉额外的空格?”…它是否对其他人有帮助是有争议的。使用数组的问题是$upstr是从html表单传递过来的,所以我不能用这种方式发送数组,只能发送字符串。
           $len = strlen($upstr);
           $cost=0;
           $upnames = array(4=>"man", 2=>"raw", 1=>"food", 3=>"fuel",5=>"tech");
           for($strloop=0;$strloop<$len; $strloop++)
           {
                 $number = $upstr[$strloop];
                 if(! empty($number))
                 {
                     $name = $upnames[$number];
                     $cost+= mysql_result($result1,0,$name) +1;
                     if(mysql_result($result2,0,$name."up")==1)
                     {
                         $cost+=100;
                     }
                 }
           }