我对我刚刚调试的一些行为有疑问,特别是如果已经设置的变量被分配给未定义的值会发生什么。我只是想检查一下,我正在理解发生了什么。如果变量已经设置了值,并且您尝试将其设置为未定义的值,那么它是否保持旧值?
具体来说,我有一些看起来像这样的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.因此我的如果(!空语句不能完成它的工作,并且案例'bar'发生的次数比它应该发生的次数多。这一切看起来都会发生吗?
当然,修剪$ string解决了我的问题,但我想确保我明白出了什么问题。如果这是一个愚蠢的问题,请道歉 - 我在这里只是一个业余爱好者....
编辑:这是实际的代码。 $ 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;
}
}
}
当$ uptr在最后有一些额外的空格时发生的事情是我会看到一个mysql错误,它无法在$ result2中找到“up”列。所以它试图在if()语句中运行该代码块,其中$ name为空或NULL或其他东西。如果我故意添加3或4个额外的空格,我会看到很多mysql错误。
答案 0 :(得分:2)
我担心变量$ array的定义在你的代码示例中是不正确的,它应该如下所示:
$ array = array(1 =&gt;'foo',2 =&gt;'bar');
如果将$ newvar设置为$ array的未定义元素(例如3),则$ newvar将设置为NULL。
答案 1 :(得分:0)
使用array_key_exists($array, $string[$count])
检查您的数组是否具有密钥值。
答案 2 :(得分:0)
好的,我已经弄明白是什么导致了我看到的行为。字符串''和''在empty()下表现不同。其中一个被认为是空的而另一个不是,这让我感到困惑。非常感谢所有的帮助。