2012-12-20 34 views
1

为什么我得到一个未定义的变量错误?我在IF声明中定义它,条件总是存在的,因为有ni的性能问题,关于如何解决这个问题的任何建议?未定义的变量错误php

if(in_array($row['billing'],$list)){ 
    $bills = array_search($row['billing'], $list); 
    } 

    echo $bills; // <-- undefined variable $bills on this line 
+4

如果什么'in_array($行[ '结算'],$列表)'是假的? – Gumbo

回答

3

这真的好像那个值($row['billing'])不是阵列($list)中,所以in_array()返回false。所以$bills永远不会被定义,因为if里面的代码永远不会运行。

可以肯定的,定义它与您选择(null''等)的默认值beforehands:

$bills = 'no billing information'; 
if(in_array($row['billing'],$list)){ 
    $bills = array_search($row['billing'], $list); 
} 

在另一方面,你不真的需要检查。如果该值不在数组中,array_search()将返回false反正:

如果在数组中返回针的关键,FALSE 否则。

因此可以简化事情:

$bills = array_search($row['billing'], $list); 
echo $bills === false ? 'no billing information' : $bills; 

你必须使用=== false因为函数可能返回0以及(如果该元素是第一个索引)。

+0

'echo $ bills'is if语句 – cheesemacfly

+0

@cheesemacfly之外,这与解决方案有什么关系? '$ bills'在if块之前被设置,所以它总会有一个值,而不管if语句。 – Benjam

+0

如果可以的话,我会再次为清理后的代码+1。 – Benjam

0

$bills变量仅存在于if statement的范围内,即在开启和关闭括号之间。

如果要使用if语句之外的值,请先定义$bills。例如:

$bills = ''; 
    if(in_array($row['billing'],$list)) 
    { 
     $bills = array_search($row['billing'], $list); 
    } 

    echo $bills; 

或者,你可以只echo出if语句范围值。

编辑:我错了,PHP does not have block scope。使用以下命令:

if(in_array($row['billing'],$list)) 
    { 
     $bills = array_search($row['billing'], $list); 
     echo $bills; 
    } 
+3

PHP没有块范围。 – Gumbo

+0

虽然你的代码会起作用,但你的推理是不正确的。 – Benjam

0

if声明if(in_array($row['billing'],$list))未持有真正。因此,$bills变量未被设置/定义。您可能需要在if声明之前对其进行定义,或者确保if声明在echo之前通过。

或者,你也可以用echo前检查其设置,

if(isset($bills)) 
    echo $bills; 
0
if(isset($bills)){echo $bills;}