array_key_exists总是返回false
问题描述:
我有这段代码,写在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但输出保持“未知”。
答
基本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函数。
答
我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
关键字在你的函数签名。通过这种方式,您可以将一个变量传递给函数的作用域,以便它可以看到它。
你的函数对'$ array'一无所知。所以你可能**也**没有激活错误报告/显示完全(这会告诉你有关错误)。 – LSerni 2014-10-30 20:59:38