2011-03-22 24 views
0

我有一些问题,我只是在调试,特别是如果一个已经设置的变量分配给一个未定义的值会发生什么。我只是想检查我是否了解发生了什么。如果一个变量已经设置了一个值,并且您尝试将其设置为未定义的值,它会保持原来的值吗?PHP设置赋值变量为undefined - 保持不变 -

具体来说,我有一些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; 
     } 
    } 
} 

,我的代码应该设置$ string要像“12212”,但由于我的错误是在年底将其发送与多余的空格的东西 - “12212”。这导致了一些异常的行为,我认为发生了什么 - 当$ count = 5,$ string [5]是未定义的,所以$ array [$ string [5]]是未定义的,$ newvar保持为2.因此,我的如果(!空语句没有做它的工作和案例'酒吧'发生了更多的时间比它应该有。这似乎会发生什么?

当然,修剪$字符串解决了我的问题,但我想以确保我明白什么是错误的道歉,如果这是一个愚蠢的问题 - 我只是一个业余爱好者在这里...

编辑:这是实际的代码$ upstr应该是一串数字。

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

当$ upstr在最后有一些额外的空格时发生了什么,我会看到一个mysql错误,它无法在$ result2中找到列“up”。所以它试图在$ name为空或者NULL的if()语句中运行该代码块。如果我有意添加3或4个额外的空格,我会看到很多mysql错误。

回答

2

恐怕变量$阵列的定义是在代码中例如不正确,它应如下所示:

$阵列=阵列(1 =>“富”,2 =>“巴”) ;

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

+0

谢谢 - 刚刚纠正了原来的问题。所以如果$ newvar是NULL,那么我的if(!empty($ newvar))语句应该已经跳出了交换机?它似乎并不是...... – coolpapa 2011-03-22 08:56:28

+0

是的,当$ newvar为NULL时,空($ newvar)应计算为true,但恕我直言,以下解决方案将更清洁:if(empty($ newvar)){break ; } – 2011-03-22 09:00:30

+0

奇怪,因为我得到的错误告诉我交换机实际上正在发生......应该发布我的实际代码吗? – coolpapa 2011-03-22 09:13:05

0

使用array_key_exists($array, $string[$count])来检查您的数组是否对您的密钥有价值。

+0

谢谢 - 这是另一个很好的解决方案。但我更感兴趣的是为什么我的错误。我只想了解我遇到的任何意外行为。 – coolpapa 2011-03-22 09:12:00

0

好吧,我已经知道是什么导致了我看到的行为。在empty()下,字符串''和''的行为是不同的。其中一个被认为是空的,另一个不是,这让我感到困惑。非常感谢所有的帮助。

+0

你应该在评论中写下它,因为这不是答案 – diEcho 2011-03-22 09:39:47

+1

你可以使用trim($ upstr)从字符串的开头和结尾删除不必要的空格。使用一组数字而不是字符串来遍历它也是一个不错的方法。另一个想法是做这样的事情:$ up_arr = str_split(trim($ upstr)),因为这会将修剪的字符串的字符拆分为数组。 – 2011-03-22 09:47:24

+0

是的,谢谢。修剪是我正在使用的解决方案。我真的只是问,因为我不知道发生了什么问题。事实上,这就是我的问题的答案,即“为什么多余的空格搞砸了这些代码?”,而不是“我该如何摆脱多余的空间?”......是否会对其他人有所帮助是有争议的。使用数组的问题在于$ upstr从html表单传递过来,所以AFAIK我不能以这种方式发送数组 - 只是一个字符串。 – coolpapa 2011-03-22 09:54:30