我有这个代码,用php编写,如果给出bar,则返回foo,如果给出foo,则返回bar。我试过了,似乎没有添加一个捕获,所以如果输入foo或bar以外的任何内容,那么" Unknown将是输出"。
<?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总是返回false,就像我去page.php的页面一样?foobar = foo或page.php?foobar = bar我明白了:
Welcome
Input: bar, Output: Unknown
Array ( [foo] => bar [bar] => foo )
或其相反的位置输入切换到foo但输出仍然是&#34;未知&#34;。
答案 0 :(得分:2)
基本PHP:在“父”范围内定义的变量在“子”范围内可见 NOT :
$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 :(得分:1)
我完成Marc的答案,提出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
关键字。这样你就可以将变量传递给函数的范围,以便它可以看到它。