array_key_exists总是返回false

时间:2014-10-30 20:57:25

标签: php

我有这个代码,用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;。

2 个答案:

答案 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关键字。这样你就可以将变量传递给函数的范围,以便它可以看到它。