2014-10-30 182 views
0

我有这段代码,写在PHP中返回foo如果酒吧给出和酒吧,如果foo给出。我尝试过了,看起来没有添加一个catch,所以如果输入了除foo或bar外的任何内容,那么“未知将会是输出”。array_key_exists总是返回false

<?php 
echo("<html><body bgcolor='#ffffff'><h1>Welcome</h1>"); 
$input = $_GET["foobar"]; 

$array = array(
    "foo" => "bar", 
    "bar" => "foo", 
); 

function getValue($value) { 
    if(array_key_exists($value, $array)) { 
     return $array[$value]; 
    } else { 
     return "Unknown"; 
    } 
} 

echo ("Input: ". $input .", Output: ". getValue($input)); 

echo("<br><br>"); 

print_r($array); 

echo("</body></html>"); ?> 

但是,看来该array_key_exists总是返回假的,当我去我的页面或者page.php文件foobar的= FOO或page.php文件foobar的=栏我得到这样的:??

Welcome 

Input: bar, Output: Unknown 

Array ([foo] => bar [bar] => foo) 

或其相反,输入切换到foo但输出保持“未知”。

+2

你的函数对'$ array'一无所知。所以你可能**也**没有激活错误报告/显示完全(这会告诉你有关错误)。 – LSerni 2014-10-30 20:59:38

回答

2

基本PHP:在一个“父”的范围定义的变量是可见的“孩子”的范围:

$array = array(...); // global scope, top-level of the script 

function getValue($value) { 
    if(array_key_exists($value, $array)) { 
           ^^^^^^^---undefined local variable, function scope 

你应该至少有

global $array; 

在开始你的getValue函数。

1

我50cts完成马克的答案,提出到global声明的替代:

<?php 
echo("<html><body bgcolor='#ffffff'><h1>Welcome</h1>"); 
$input = $_GET["foobar"]; 

$array = array(
    "foo" => "bar", 
    "bar" => "foo", 
); 

function getValue($value) use (&$array) { 
    if(array_key_exists($value, $array)) { 
     return $array[$value]; 
    } else { 
     return "Unknown"; 
    } 
} 

echo ("Input: ". $input .", Output: ". getValue($input)); 

echo("<br><br>"); 

print_r($array); 

echo("</body></html>"); 
?> 

通知的use关键字在你的函数签名。通过这种方式,您可以将一个变量传递给函数的作用域,以便它可以看到它。